home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / unix / utils2.1 < prev   
Internet Message Format  |  1989-11-13  |  82KB

  1. Path: xanth!mcnc!rutgers!tut.cis.ohio-state.edu!snorkelwacker!apple!brutus.cs.uiuc.edu!wuarchive!texbell!texsun!newstop!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i211:  utils - unix-like du, tee, cut, tail
  5. Message-ID: <127794@sun.Eng.Sun.COM>
  6. Date: 13 Nov 89 03:34:52 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 2041
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: dg3i+@andrew.cmu.edu (David Gay)
  12. Posting-number: Volume 89, Issue 211
  13. Archive-name: unix/utils2.1
  14.  
  15. [Yet another rendition of some unix favorites.  I think the archives
  16. now have a minimum of about 4 implementations of each...
  17. uuencoded executables and docs included. ..bob]
  18.  
  19. # This is a shell archive.
  20. # Remove anything above and including the cut line.
  21. # Then run the rest of the file through 'sh'.
  22. # Unpacked files will be owned by you and have default permissions.
  23. #----cut here-----cut here-----cut here-----cut here----#
  24. #!/bin/sh
  25. # shar: SHell ARchive
  26. # Run the following text through 'sh' to create:
  27. #    README
  28. #    cut.c
  29. #    cut.doc.uu
  30. #    cut.uu
  31. #    du.c
  32. #    du.doc.uu
  33. #    du.uu
  34. #    getoptx.3
  35. #    getoptx.c
  36. #    lmkfile
  37. #    tail.c
  38. #    tail.doc.uu
  39. #    tail.uu
  40. #    tee.c
  41. #    tee.doc.uu
  42. #    tee.uu
  43. # This is archive 1 of a 1-part kit.
  44. # This archive created: Sun Nov 12 19:29:11 1989
  45. echo "extracting README"
  46. sed 's/^X//' << \SHAR_EOF > README
  47. XHere are a few unix-like utilities which I wrote. Included are: cut, tail,
  48. Xhead & du.
  49. X
  50. XAlso present is getoptx (used by cut), which recently came over some
  51. Xnewsgroup or the other (alt.sources ?).
  52. X
  53. XTo uudecode everything, type
  54. X
  55. X    lmk decode
  56. X
  57. X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  58. XDavid Gay
  59. X  "(p.suiv :=: q.prec.suiv).prec :=: q.prec"
  60. X  You don't want to know about this language !
  61. X
  62. XGAY_D@ELMA.EPFL.CH, or GAY_D%ELMA.EPFL.CH@CLSEPF51.bitnet
  63. X
  64. X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  65. X
  66. X
  67. SHAR_EOF
  68. echo "extracting cut.c"
  69. sed 's/^X//' << \SHAR_EOF > cut.c
  70. X/*
  71. X*/
  72. X#include <stdio.h>
  73. X#include <stdlib.h>
  74. X#include <string.h>
  75. X#include <ctype.h>
  76. X#include <error.h>
  77. X#include <ios1.h>
  78. X#include <proto/dos.h>
  79. X
  80. X#define TRUE 1
  81. X#define FALSE 0
  82. X
  83. X#define WARN 10
  84. X#define ERROR 20
  85. X
  86. X#define MAXLEN 255 /* Max line length */
  87. X#define MAXDELIM 20
  88. X#define MAXLIST 260 /* > MAXLEN */
  89. X
  90. X#define isoctal(c) ((c) >= '0' && (c) <= '7')
  91. X#define hexdigit(c) ((c) <= '9' ? (c) - '0' : tolower(c) - 'a')
  92. X
  93. Xextern char *optarg;
  94. Xextern int opterr, optind;
  95. Xextern int _bufsiz;
  96. Xint err;
  97. X
  98. Xchar delims[MAXDELIM] = "\t ";
  99. Xint suppress, column, field, delim, unique;
  100. Xchar use[MAXLIST];
  101. X
  102. Xint nextfield(char *field, char *line, char **pos)
  103. X{
  104. X    static int done;
  105. X    char *end;
  106. X
  107. X    if (*pos == NULL)
  108. X    {
  109. X        if (unique)
  110. X            *pos = line;
  111. X        else
  112. X            *pos = line + strspn(line, delims);
  113. X        done = FALSE;
  114. X    }
  115. X    if (done) return EOF;
  116. X
  117. X    end = strpbrk(*pos, delims);
  118. X
  119. X    if (!end)
  120. X    {
  121. X        strcpy(field, *pos);
  122. X        done = TRUE;
  123. X
  124. X        return '\0';
  125. X    }
  126. X    else
  127. X    {
  128. X        field[end - *pos] = '\0';
  129. X        strncpy(field, *pos, end - *pos);
  130. X        if (unique)
  131. X            *pos = end + 1;
  132. X        else
  133. X            *pos = end + strspn(end, delims);
  134. X
  135. X        return *end;
  136. X    }
  137. X}
  138. X
  139. Xchar *extract_list(char *to, char *from)
  140. X{
  141. X    char *ret = to;
  142. X    int pos = 0;
  143. X
  144. X    while (pos < MAXLIST - 1 && from[pos])
  145. X    {
  146. X        if (use[pos + 1])
  147. X           *to++ = from[pos];
  148. X        pos++;
  149. X    }
  150. X    *to++ = '\n'; /* Shouldn't be here, but ... */
  151. X    *to = '\0';
  152. X    return ret;
  153. X}
  154. X
  155. Xchar *expand_tabs(char *dest, char *src, int maxlen)
  156. X{
  157. X    int spos = 0, dpos = 0;
  158. X
  159. X    while (src[spos] && dpos < maxlen - 1)
  160. X    {
  161. X        if (src[spos] != '\t') dest[dpos++] = src[spos++];
  162. X        else
  163. X        {
  164. X            int pad = 8 - spos % 8;
  165. X
  166. X            if (dpos + pad <= maxlen - 1)
  167. X            {
  168. X                memset(&dest[dpos], ' ', 8 - spos % 8);
  169. X                dpos += pad;
  170. X                spos++;
  171. X            }
  172. X            else break;
  173. X        }
  174. X    }
  175. X    dest[dpos] = '\0';
  176. X    return dest;
  177. X}
  178. X
  179. Xvoid cut(FILE *file)
  180. X{
  181. X    char line[MAXLEN + 1], detabbed[MAXLEN + 1], out[MAXLEN + 2];
  182. X
  183. X    line[MAXLEN] = '\0';
  184. X
  185. X    while (errno == 0 && fgets(line, MAXLEN, file) && errno == 0)
  186. X    {
  187. X        int l = strlen(line);
  188. X
  189. X        if (l > 0 && line[l - 1] == '\n') line[l - 1] = '\0';
  190. X
  191. X        if (column)
  192. X        {
  193. X            expand_tabs(detabbed, line, MAXLEN + 1);
  194. X            extract_list(out, detabbed);
  195. X            fputs(out, stdout);
  196. X        }
  197. X        else
  198. X            if (strpbrk(line, delims) != NULL)
  199. X            {
  200. X                int pos = 1, del, lastdel = 0;
  201. X                char *next = NULL;
  202. X
  203. X                while (errno == 0 && pos < MAXLIST && (del = nextfield(out, lin
  204. Xe, &next)) != EOF)
  205. X                {
  206. X                    if (use[pos])
  207. X                    {
  208. X                        if (lastdel) fputc(lastdel, stdout);
  209. X                        lastdel = del;
  210. X                        if (errno == 0) fputs(out, stdout);
  211. X                    }
  212. X                    pos++;
  213. X                }
  214. X                if (errno == 0) fputc('\n', stdout);
  215. X            }
  216. X            else if (!suppress)
  217. X            {
  218. X                fputs(line, stdout);
  219. X                fputc('\n', stdout);
  220. X            }
  221. X    }
  222. X    if (errno != 0)
  223. X    {
  224. X        perror("cut failed");
  225. X        err = ERROR;
  226. X    }
  227. X}
  228. X
  229. Xchar *c_str(char *to, char *from, int cnt)
  230. X{
  231. X    char *ret = to;
  232. X
  233. X    while (from[0] && --cnt)
  234. X    {
  235. X        if (from[0] == '\\' && from[1])
  236. X        {
  237. X            switch (*++from)
  238. X            {
  239. X                case 'n':
  240. X                    *to++ = '\n';
  241. X                    break;
  242. X                case 'r':
  243. X                    *to++ = '\r';
  244. X                    break;
  245. X                case 't':
  246. X                    *to++ = '\t';
  247. X                    break;
  248. X                case 'b':
  249. X                    *to++ = '\b';
  250. X                    break;
  251. X                case 'f':
  252. X                    *to++ = '\f';
  253. X                    break;
  254. X                case 'x':
  255. X                    if (isxdigit(from[1]) && isxdigit(from[2]))
  256. X                    {
  257. X                        *to++ = hexdigit(from[1]) << 4 | hexdigit(from[2]);
  258. X                        from += 2;
  259. X                    }
  260. X                    else
  261. X                        fputs("Bad hex char\n", stderr);
  262. X                    break;
  263. X                case '0': case '1': case '2': case '3':
  264. X                case '4': case '5': case '6': case '7':
  265. X                    if (isoctal(from[1]) && isoctal(from[2]))
  266. X                    {
  267. X                        *to++ = (from[0] - '0') << 6 | (from[1] - '0') << 3 |
  268. X                                (from[2] - '0');
  269. X                        from += 2;
  270. X                    }
  271. X                    else
  272. X                        fputs("Bad octal char\n", stderr);
  273. X                    break;
  274. X                default:
  275. X                    *to++ = *from;
  276. X                    break;
  277. X            }
  278. X            from++;
  279. X        }
  280. X        else
  281. X            *to++ = *from++;
  282. X    }
  283. X    *to = '\0';
  284. X    return ret;
  285. X}
  286. X
  287. Xint analyse_range(char *range)
  288. X{
  289. X    int last, first;
  290. X
  291. X    range = stpblk(range);
  292. X
  293. X    if (*range == '-') first = 1;
  294. X    else
  295. X    {
  296. X        if (!isdigit(*range)) return FALSE;
  297. X        range += stcd_i(range, &first);
  298. X        range = stpblk(range);
  299. X    }
  300. X    if (*range == '-')
  301. X    {
  302. X        range++;
  303. X        if (isdigit(*range))
  304. X            range += stcd_i(range, &last);
  305. X
  306. X        else
  307. X            last = MAXLIST - 1;
  308. X    }
  309. X    else last = first;
  310. X
  311. X    if (*stpblk(range) == '\0' && first > 0 && first <= last && last < MAXLIST)
  312. X     
  313. X    {
  314. X        int i;
  315. X
  316. X        for (i = first; i <= last; i++) use[i] = TRUE;
  317. X
  318. X        return TRUE;
  319. X    }
  320. X    else
  321. X        return FALSE;
  322. X}
  323. X
  324. Xint analyse_list(char *list)
  325. X{
  326. X    int i;
  327. X    char *end;
  328. X
  329. X    for (i = 1; i < MAXLIST; i++) use[i] = FALSE;
  330. X
  331. X    while (end = strchr(list, ','))
  332. X    {
  333. X        *end = '\0';
  334. X        if (!analyse_range(list)) return FALSE;
  335. X        list = end + 1;
  336. X    }
  337. X    return analyse_range(list);
  338. X}
  339. X
  340. Xvoid main(int argc, char **argv)
  341. X{
  342. X    int usage = TRUE, ch;
  343. X
  344. X    /* Setup stdout */
  345. X    if (IsInteractive(chkufb(fileno(stdout))->ufbfh))
  346. X        setvbuf(stdout, NULL, _IOLBF, _bufsiz);
  347. X
  348. X    /* Analyse command line */
  349. X    while (usage && (ch = getoptx(argc, argv, "c:d:f:su")) != EOF)
  350. X    {
  351. X        switch (ch)
  352. X        {
  353. X            case 'c':
  354. X                column = TRUE;
  355. X                usage = analyse_list(optarg);
  356. X                break;
  357. X            case 'd':
  358. X                delim = TRUE;
  359. X                c_str(delims, optarg, MAXDELIM);
  360. X                break;
  361. X            case 'f':
  362. X                field = TRUE;
  363. X                usage = analyse_list(optarg);
  364. X                break;
  365. X            case 's':
  366. X                suppress = TRUE;
  367. X                break;
  368. X            case 'u':
  369. X                unique = TRUE;
  370. X                break;
  371. X            default:
  372. X                usage = FALSE;
  373. X                break;
  374. X        }
  375. X    }
  376. X    if (!(column && !(delim || field || suppress) || field && !column))
  377. X        usage = FALSE;
  378. X
  379. X    if (!usage)
  380. X    {
  381. X        fprintf(stderr, "Usage:\t%s -clist [files]\n\t%s -flist [-dchar] [-su]
  382. X[files]\n", argv[0], argv[0]);
  383. X        err = WARN;
  384. X    }
  385. X    else
  386. X        /* Do cut */
  387. X        if (argc == optind)
  388. X            cut(stdin);
  389. X        else
  390. X        {
  391. X            int i;
  392. X
  393. X            for (i = optind; err < ERROR && i < argc; i++)
  394. X            {
  395. X                FILE *f = fopen(argv[i], "r");
  396. X
  397. X                if (!f)
  398. X                {
  399. X                    fprintf(stderr, "Error opening %s", argv[i]);
  400. X                    perror("");
  401. X                    err = WARN;
  402. X                }
  403. X                else
  404. X                {
  405. X                    cut(f);
  406. X                    fclose(f);
  407. X                }
  408. X            }
  409. X        }
  410. X    exit(err);
  411. X}
  412. SHAR_EOF
  413. echo "extracting cut.doc.uu"
  414. sed 's/^X//' << \SHAR_EOF > cut.doc.uu
  415. X
  416. Xbegin 644 cut.doc
  417. XM"B`@("`@0U54*#$I("`@("`@("`@("`@("`@("`@("`@("!5<V5R(&UA;G5A)
  418. XM;"`@("`@("`@("`@("`@("`@("`@("`@($-55"@Q*0H*"@H@("`@()LQ;4Y!J
  419. XM344*("`@("`@("`@()LP;6-U="`M(&-U="!O=70@<&%R=',@;V8@96%C:"!L-
  420. XM:6YE(&]F(&$@9FEL90H*("`@("";,6U364Y/4%-)4PH@("`@("`@("`@8W5T]
  421. XM()LP;2V;,6UC()LP;6QI<W0@6R!F:6QE<R!="B`@("`@("`@("";,6UC=70@/
  422. XMFS!M+9LQ;68@FS!M;&ES="!;("V;,6UD()LP;6-H87)S(%T@6R`MFS%M<W4@L
  423. XMFS!M72!;(&9I;&5S(%T*"B`@("`@FS%M1$530U))4%1)3TX*("`@("`@("`@;
  424. XM()LP;9LT;6-U=)LP;2`@8V%N(&-U="!O=70@8V]L=6UN<R!O<B!F:65L9',@'
  425. XM9G)O;2!E86-H(&QI;F4@;V8@82!F:6QE+@H@("`@("`@("`@0V]L=6UN<R!A]
  426. XM<F4@<W!E8VEF:65D("!B>2`@8VAA<F%C=&5R("!P;W-I=&EO;G,@("AW:71HW
  427. XM("!T86)S"B`@("`@("`@("!E>'!A;F1E9"DL(&9I96QD<R!A<F4@<V5P87)A=
  428. XM=&5D(&)Y(&1E;&EM:71E<G,@*&1E9F%U;'0@FS1M=&%BFS!M("8*("`@("`@2
  429. XM("`@()LT;7-P86-EFS!M("D@(&%N9"`@>6]U("!S96QE8W0@('1H92`@9&5S6
  430. XM:7)E9"!O;F5S+B`@26YP=70@:7,@9G)O;0H@("`@("`@("`@FS1M<W1D:6Z;*
  431. XM,&T@:68@;F\@9FEL97,@87)E(&=I=F5N+@H*("`@("`@("`@(%1H92!F;VQL]
  432. XM;W=I;F<@;W!T:6]N<R!A<F4@<F5C;V=N:7-E9#H*"B`@("`@("`@("";-&ULA
  433. XM:7-TFS!M(&ES(&$@8V]M;6$M<V5P87)A=&5D(&QI<W0@(&]F("!N=6UB97)S%
  434. XM("!O<B`@<F%N9V5S("`H96<*("`@("`@("`@("`@("`@FS1M,2PS+36;,&T@%
  435. XM<F5P<F5S96YT<R`Q+"`S+"`T("8@-2DN("";-&TM-ILP;2!I<R!S:&]R="!FV
  436. XM;W(@FS1M,2TVFS!M(&%N9`H@("`@("`@("`@("`@("";-&TT+9LP;2!F;W(@B
  437. XMFS1M-)LP;2V;-&UI;F9I;FET>9LP;2X*"B`@("`@("`@("`MFS%M8Z";,&V;Q
  438. XM-&UL:7-TFS!MH*"@(%1H92";-&UL:7-TFS!M('-P96-I9FEE<R!W:&EC:"!C7
  439. XM;VQU;6YS('1O('1A:V4@9G)O;2!T:&4*("`@("`@("`@("`@("`@9FEL97,L$
  440. XM("!E9R`@+9LT;6,RFS!M+9LT;3$PFS!M("!W;W5L9"!T86ME(&-O;'5M;G,@U
  441. XM,B!T;R`Q,"P@86YD("V;-&UCFS!M+0H@("`@("`@("`@("`@("!W;W5L9"!TO
  442. XM86ME('1H92!W:&]L92!F:6QE*',I+"!W:71H('1A8G,@(&5X<&%N9&5D("!I9
  443. XM;G1O"B`@("`@("`@("`@("`@('-P86-E<RX*"B`@("`@("`@("`MFS%M9J";#
  444. XM,&V;-&UL:7-TFS!MH*"@("!396QE8W0@(&9I96QD<R`@<W!E8VEF:65D(&)YK
  445. XM('1H92";-&UL:7-TFS!M+"!W:&EC:"!A<F4*("`@("`@("`@("`@("`@<V5P:
  446. XM87)A=&5D(&)Y('1H92!D96QI;6ET97)S("AS964@("V;-&UDFS!M*2X@()LT/
  447. XM;4QI;F5SFS!M("";-&UW:71HFS!M("";-&UB99LP;0H@("`@("`@("`@("`@U
  448. XM("";-&UL969TFS!M()LT;75N=&]U8VAE9)LP;2P@FS1M97AC97!TFS!M()LTZ
  449. XM;6EFFS!M()LT;71H99LP;2`MFS1M<YLP;2!O<'1I;VX@:7,@=7-E9"X*"B`@%
  450. XM("`@("`@("`MFS%M9*";,&V;-&UC:&%R<YLP;:"@($-H86YG92!T:&4@9&5F]
  451. XM875L="!D96QI;6ET97)S("AS964@86)O=F4I+@H*("`@("`@("`@("V;,6US^
  452. XMH)LP;:"@("!3=7!P<F5S<R!L:6YE<R!W:71H(&YO(&1E;&EM:71E<G,@*&]T.
  453. XM:&5R=VES92!T:&5Y(&%R90H@("`@("`@("`@("`@("!L969T(&-O;7!L971EW
  454. XM;'D@86QO;F4I+@H*("`@("`@("`@("V;,6UUH)LP;:"@($-O;G-E8W5T:79E:
  455. XM(&1E;&EM:71E<G,@87)E(&YO<FUA;&QY(&-O;G-I9&5R960@87,@(&]N90H@8
  456. XM("`@("`@("`@("`@("`H=7-E9G5L(&EF("!Y;W4@:&%V92!A(&)L86YK('-EM
  457. XM<&%R871E9"!F:6QE*2X@($AO=V5V97(L"B`@("`@("`@("`@("`@(&EF("!YV
  458. XM;W4@('=A;G0@('5N:7@@("!B96AA=FEO=7(L("`@9VEV92`@('1H:7,@("!OE
  459. XM<'1I;VX*("`@("`@("`@("`@("`@*&-O;G-E8W5T:79E(&1E;&EM:71E<G,@6
  460. XM(&EN9&EC871E("!B;&%N:R!F:65L9',I+B`@*"`MFS1M9ILP;0H@("`@("`@0
  461. XM("`@("`@("!O<'1I;VX@;VYL>2D*"B`@("`@FS%M0E5'4PH@("`@("`@("`@,
  462. XMFS!M3&EN97,@;&]N9V5R('1H86X@,C4U(&-H87)A8W1E<G,@=VEL;"!B92!SS
  463. XM<&QI="X*"@H*("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@/
  464. X'("`M,2T*"@H*S
  465. X``
  466. Xend
  467. Xsize 2122
  468. SHAR_EOF
  469. echo "extracting cut.uu"
  470. sed 's/^X//' << \SHAR_EOF > cut.uu
  471. X
  472. Xbegin 644 cut
  473. XM```#\P`````````#``````````(```M-`````````<L```/I```+321()`!)\
  474. XM^0````!'^0```Y1R`"`\````YF`")L%1R/_\+'@`!"E.`\PI3P/40JP#T"9NS
  475. XM`11P`"(\```P`$ZN_LXI:P"8`\A*JP"L9P``<"`/D*\`!`:`````@"E``YAAG
  476. XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)`]S0@5*`0F=2@`)`__Z?P%6`+
  477. XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z
  478. XM``!X*6L`.@.8<']2@-&L`YAA``#"0>L`7$ZN_H!!ZP!<3J[^C"E``]`O`"1`\
  479. XM("H`)&<2+&P''"!`(B@``"E!`\A.KO^"(BH`(&<:)#P```/M3J[_XBE``]AG#
  480. XM"N6(($`G:``(`*0@;`/0+PA(;`.4(&@`)"EH``0#W$ZZ"JQ.N@]L<`!@!"`OW
  481. XM``0O`"`L`\!G!"!`3I!.NBM$+'@`!")L!QQ.KOYB3KH*@DJL`]!G&B(L`]AG%
  482. XM!$ZN_]PL>``$3J[_?")L`]!.KOZ&(!\N;`/43G5P9&"T0_H`$'``3J[]V"E`M
  483. XM!QQG[$YU9&]S+FQI8G)A<GD`3E4``$CG`#`F;P`4)&\`&$J29B)*K`/X9P0D<
  484. XMBV`22&P``"\+3KH;+E!/($O1P"2(<``I0`/@2JP#X&<$</]@9DAL```O$DZZU
  485. XM&:I03R9`(`MF%"!2(FT`"!+89OQP`2E``^!P`&!`(`N0DB!M``A",`@`+P`O)
  486. XM$B\(3KH8(D_O``Q*K`/X9PA!ZP`!)(A@$DAL```O"TZZ&KY03R!+T<`DB!`3X
  487. XM2(!(P$S?#`!.74YU3E7_]$CG`3`F;P`@($M^`"](``Q@&$'L`_U*,'@`9PP@V
  488. XM2R9*(FT`#!"Q>`!2AT7K``$,AP```0-L"B!M``Q*,'@`9M(6O``*0A(@+P`,T
  489. XM3-\,@$Y=3G5.5?_L2.</,"XO`#QX`'H`8#`0$W()L`%G"%*%4H04@&`@(`1R1
  490. XM"$ZZ)F!P")"!VH"ZAFXJ<B`B2F`"$L%3@&3Z4H0@;0`,T<0F2"!M``C1Q21(^
  491. XM2A-G""P'4X:ZAFVT0A(@+0`(3-\,\$Y=3G5.5?SJ2.<',"9O`S)"+?_O8``!N
  492. XM#$'M_O`B2$H99OQ3B9/(+@E*AV\00>W^[]'')$AP"K`29@)"$DJL`^QG,$AXH
  493. XM`0!(;?[P2&W]\&$`_TA(;?WP2&W\[V$`_N9(;`%>2&W\[TZZ'VA/[P`<8```Q
  494. XMLDAL``!(;?[P3KH8"E!/2H!G?'X!?`!"K?SJ8#)![`/\2C!X`&<F2H9G#$AL#
  495. XM`5XO!DZZ'UQ03RP%2JP'&&8.2&P!7DAM_.].NA\64$]2ATJL!QAF)`R'```!+
  496. XM!&P<2&W\ZDAM_O!(;?SO80#]N$_O``PJ`'#_NH!FI$JL!QAF,DAL`5Y(>``*Q
  497. XM3KH?!E!/8")*K`/H9AQ(;`%>2&W^\$ZZ'L!(;`%>2'@`"DZZ'N1/[P`02JP'_
  498. XM&&8>+PM(>`#_2&W^\$ZZ(7!/[P`,2H!G"$JL!QAG`/[42JP'&&<02&P`%$ZZ^
  499. XM&TY83W`4*4`#Y$S?#.!.74YU3E7_Z$CG.S`N+P!$)&T`#"!M``@O2``D8``"=
  500. XM$$?J``%P7+`29@`!]DHJ``%G``'N)&T`"!`32(!R5%U!:P`!SK![$`AF]$[[`
  501. XM$`0`-V```68`-F```6``-6```5H`-&```50`,V```4X`,F```4@`,6```4(`S
  502. XM,&```3P`>&```'``9F```%H`8F```$0`=&```"X`<F```!@`;F````)!Z@`!C
  503. XM%+P`"BM(``A@``%J0>H``12\``TK2``(8``!6D'J``$4O``)*T@`"&```4I!+
  504. XMZ@`!%+P`""M(``A@``$Z0>H``12\``PK2``(8``!*A`K``%(@$C`0>P"C0@PG
  505. XM``<(`&<``*(2*P`"2(%(P4'L`HT(,``'&`!G``",0>H``2M(``@4*P`!=CFTY
  506. XM`VX*2()(PG@PE(1@*$'L`HT(,```"`!G#A`K``%(@$C`="#0@F`($"L``4B`F
  507. XM2,!T89"")`#I@BP"$"L``K`#;@I(@$C`=#"0@F`F0>P"C0@P```8`&<.$"L`<
  508. XM`DB`2,!R(-"!8`@0*P`"2(!(P')AD($B!H*`%(%4BV!R2&P!@$AL`"!.NAR^I
  509. XM4$]@8A`K``%R,+`!;3YT-[`";C@6*P`"M@%M,+8";BQ!Z@`!2(-(PW(PEH%(*
  510. XM@$C`D('G@!032()(PI2![8*$@(2#%()4BRM(``A@&DAL`8!(;``N3KH<9E!/T
  511. XM8`I!Z@`!%),K2``(1>L``6`.($HD2R)M``@2T"M)``A*$F<&4X=F`/WJ(&T`B
  512. XM"$(0("\`)$S?#-Q.74YU3E7_\$CG`1`F;0`(+PM.NA3F6$\F0!`3<BVP`68(E
  513. XM<@$K0?_P8"Y(@$C`0>P"C0@P``((`&8&<`!@``"82&W_\"\+3KH6,B!+T<`N6
  514. XMB$ZZ%*A03R9`$!-R+;`!9BY2BQ`32(!(P$'L`HT(,``""`!G$$AM__0O"TZZ'
  515. XM%?Y03]?`8!`K?````0/_]&`&*VW_\/_T+PM.NA1B6$\@0$H09C(@+?_P2H!O=
  516. XM*B(M__2P@6XB#($```$$;!HN`&`,0>P#_!&\``%X`%*'OJW_]&_N<`%@`G``H
  517. XM3-\(@$Y=3G5.5?_T2.<!,"9O`"!P`2M`__0P/`$"<@!![`/]$,%1R/_\8!9"&
  518. XM$B\+80#^_%A/2H!F!'``8!Q'Z@`!2'@`+"\+3KH30%!/)$`@"F;8+PMA`/[6[
  519. XM3.T,@/_H3EU.=4CG!S(N+P`<)F\`('P!+RP!>DZZ(W!83R!`(B@`!"QL!QQ.\
  520. XMKO\H2H!G``"P+RP#D$AX`$!"ITAL`5Y.NA503^\`$&```)8@!7(H!$$`"&L`(
  521. XM`(BPNQ`(9O).^Q`&````=6```&X```!S8```7@```&9@``!"````9&```!X`@
  522. XM``!C8````G`!*4`#["\L!01A`/\46$\L`&!"<`$I0`/T2'@`%"\L!01(;```8
  523. XM80#[V$_O``Q@)G`!*4`#\"\L!01A`/[D6$\L`&`2<`$I0`/H8`IP`2E``_A@A
  524. XM`GP`2H9G&DAL`#XO"R\'3KH`W$_O``PJ`'#_NH!F`/]02JP#[&<22JP#]&8,D
  525. XM2JP#\&8&2JP#Z&<.2JP#\&<&2JP#[&<"?`!*AF8>(%,O""\(2&P`2$AL`8!._
  526. XMNAJ.3^\`$'`**4`#Y&!ROJP`H&8,2&P!/&$`^=A83V!@+"P`H"`&Y8#7P&!&2
  527. XM2&P`A"\33KH:FE!/)$`@"F8B+Q-(;`"&2&P!@$ZZ&D1(;`"83KH6/$_O`!!PF
  528. XM"BE``^1@#B\*80#YCBZ*3KH<C%A/4H98BPRL````%`/D;`2\AVVL+RP#Y$ZZ\
  529. XM',Q83TS?3.!.=0``3E7_[DCG!S`N+P`N)F\`,G`!L*P`I&9$("P`H+"';!;E6
  530. XM@"1S"``O0``4<BVR$F8&2BH``68&</]@``'@2&P`J"`O`!@O,P@`3KH0TE!/X
  531. XM2H!F"E*L`*!P_V```<`@+`"@Y8`@<P@`T>P`I!P02(9(QBE&!0!P.KR`9QAP&
  532. XM*KR`9Q(O!B\M`!!.NA#:4$\D0$J`9GI*K`"<9TP@!AM`__(;?``*__,O$TZZS
  533. XM$&`N@"\32'@``DZY```+Y$AL`,).NA!*+H!(;`"L2'@``DZY```+Y'`"+H!(>
  534. XM;?_R+P!.N0``"^1/[P`@4JP`I"`L`*`B`.6!(',8`-'L`*1*$&8*4JP`H'`!<
  535. XM*4``I'`_8``!$!HJ``%(A4C%("P`H"(`Y8$D<Q@`<BJZ@68VU>P`I"X`4H=*8
  536. XM*@`!9Q`I1P"@0>H``2E(!01@``#60>P`V"E(!00B!RE!`*!P`2E``*1@``"^<
  537. XM<CJZ@68``)K5[`"D*@!2A4HJ``%G#BE%`*!!Z@`!*4@%!&!T*44`H+J';5Q*A
  538. XMK`"<9TP@!AM`__(;?``*__,O$TZZ#VHN@"\32'@``DZY```+Y$AL`/Q.N@]4&
  539. XM+H!(;`#:2'@``DZY```+Y'`"+H!(;?_R+P!.N0``"^1/[P`@<`$I0`"D<#]@*
  540. XM-B`L`*#E@%*L`*`I<P@`!01P`2E``*1@'%*L`*0@+`"D2C((`&8*<`%2K`"@A
  541. XM*4``I$*L!00@!DS?#.!.74YU``!.=4YU2.<',"XO`!@F;P`<+"\`("\'3KH?9
  542. XMA%A/)$`@"F8$</]@-@@J``,``V<02'@``D*G+P=.NA6P3^\`#"\&+PLO*@`$;
  543. XM3KH:J$_O``PJ`$JL`ZQG!'#_8`(@!4S?#.!.=0``````````<&%.5?_$2.<GK
  544. XM,"9O`%PD;P!@?@!\`'H`<``;?``@__MR`"M!__9T_RM"__)![?_0&T#_\1M`P
  545. XM__PK0?_D*T'_Z"M(_\Q*$V="<``0$W(874%K.+![$`AF]D[[$`0`(V```"``>
  546. XM(&```!8`*V````P`+6````)^`6`.?`%@"GH!8`8;?``!__Q2BV"Z$!-R,+`!Q
  547. XM9@92BQM!__MP*K`39A`@4D/H``0DB2M0__92BV`.2&W_]B\+3KH0.%!/U\`0U
  548. XM$W(NL`%F)E*+<"JP$V80(%)#Z``$)(DK4/_R4HM@#DAM__(O"TZZ$`I03]?`=
  549. XM$!-R;+`!9@H;?``!__%2BV`(<FBP`68"4HL0&W(`$@`;0/_P<#!=0&L``E2RH
  550. XM>P`(9O1.^P`$`&-@``(J`'-@``'H`%A@``%^`'A@``%X`'!@``%>`&]@``$,H
  551. XM`'5@``#B`&1@```"2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^QL_
  552. XM"G(!1*W_["M!_^A*K?_H9P1P+6`*2@9G!'`K8`)P(!M`_]!P`!`&(BW_Z(*`L
  553. XM<``0!8*`9PA2K?_,4JW_Y"\M_^PO+?_,3KH-UE!/*T#_R"`M__)*@&H&<@$KB
  554. XM0?_R("W_R"(M__*2@$CM``+_Q&\N(&W_S")(T\%@`A+84X!D^G``$"W_^R(MX
  555. XM_\0@;?_,8`(0P%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'9P`!4!M\`"#_*
  556. XM^V```49*+?_Q9PP@4D/H``0DB2`08`H@4D/H``0DB2`0*T#_[&``_V)*+?_Q@
  557. XM9PP@4D/H``0DB2`08`H@4D/H``0DB2`0*T#_[$HM__QG$B!M_\P0_``P<@$K,
  558. XM0?_D*TC_S"\`+RW_S$ZZ#3!03RM`_\A@`/\H&WP`,/_[("W_\DJ`:@9P""M`Q
  559. XM__)*+?_Q9PP@4D/H``0DB2`08`H@4D/H``0DB2`0*T#_[$HM__QG%B!M_\P0>
  560. XM_``P$/P`>'("*T'_Y"M(_\PO`"\M_\Q.N@T,4$\K0/_(<%BP+?_P9@#^ODAMD
  561. XM_]!.N@JP6$]@`/ZP(%)#Z``$)(DB4"M)_\QF"$'Z`-PK2/_,(&W_S$H89OQ3W
  562. XMB)'M_\PK2/_D("W_\DJ`:RJQP&\F*T#_Y&`@<`$K0/_D(%)#Z``$)(D@$!M`P
  563. XM_]!"+?_18`9P`&```(P@+?_D(BW_]K*`;`AT`"M"__9@!)&M__9*!V<V4ZW_$
  564. XMY&T8<``@;?_,$!@O`"M(_\P@;0`03I!83V#B4ZW_]FU(<``0+?_[+P`@;0`0'
  565. XM3I!83V#H4ZW_]FT2<``0+?_[+P`@;0`03I!83V#H4ZW_Y&T8<``@;?_,$!@O(
  566. XM`"M(_\P@;0`03I!83V#B(`M,WPSD3EU.=0``3E7_]DCG`3`F;P`>)&\`(BMM.
  567. XM`!#_]AX:2@=G-'`EO@!F(K`29@12BF`:+PM(;?_V+PIA`/O,3^\`#"M`__IG@
  568. XM!"1`8-)P`!`'+P!.DUA/8,9,WPR`3EU.=4Y5__!(YR$R)F\`+`RL````(`:"8
  569. XM;```AA`3<B"P`6<,<@FP`6<&<@JP`68$4HM@Z$H39V@@+`:"Y8!2K`:"0>P&^
  570. XMBM'`)$AP(K`39B92BR2+2A-G"G`BL!-G!%*+8/)*$V8,2'@``4ZZ&S183V">]
  571. XM0AM@FB2+2A-G&!`3<B"P`6<0<@FP`6<*<@JP`6<$4HM@Y$H39@)@!D(;8`#_\
  572. XM<DJL!H)F!B!L`]!@!$'L!HHI2`:&2JP&@F9\0?H!)$/L!D@BV"+8(M@BV#*0`
  573. XM(FP#T"!I`"1(>``H+R@`!$AL!DA.N@CJ3^\`#$'L!D@B""0\```#[BQL!QQ.6
  574. XMKO_B*4`%#"E`!11R!"E!!1`I0`4<*4$%&.6`D\DL>``$*T#_\$ZN_MH@;?_PD
  575. XM(D`C:``(`*1^`"M`__1@*BQL!QQ.KO_**4`%#$ZN_\0I0`440?H`IB(()#P`E
  576. XM``/M3J[_XBE`!1Q^!"`'`$"``8&L!0@@!P!`@`*!K`40`*P``(`#!1A*K`&D-
  577. XM9P1P`&`&(#P``(``+@!"K`%8(`<`0``!*4`!5'`!*4`!>B`'`$```BE``79P&
  578. XM`BE``9P@!P!``(`I0`&80?H7GBE(`\0O+`:&+RP&@DZZ]8I"ETZZ%`A,[4R$P
  579. XM_]Q.74YU8V]N.C$P+S$P+S,R,"\X,"\`*@``````````````````````````H
  580. XM```````````````````````O"R9O``A*JP`49PP(*P`#`!MF!'``8#8O+`.0"
  581. XM3KH/_EA/)T``!"=``!!*@&8*<`PI0`<8</]@%B=L`Y``%'#SP:L`&'``)T``Y
  582. XM#"=```@F7TYU``````````````````!.5?_L2.<O$"XO`#0F;P`X*`=P,<"K8
  583. XM`!AG!G#_8``"<`@K``<`&E;`1`!(@$C`+`!*JP`49@``A`@K``(`&V9Z<``GJ
  584. XM0``,<O^^@6<``D(O"TZZ_TY83TJ`9PP(ZP`%`!MP_V```BH(ZP`!`!M*!F<.\
  585. XM("L`%"(`1($G00`,8`@@*P`4)T``#%.K``QM%B!K``1#Z``!)TD`!"`'$(!R9
  586. XM`!(`8!(@!W(`$@`O"R\!80#_4E!/(@`@`6```=8(*P`"`!MG6'#_OH!F!G``\
  587. XM8``!PB`'&T#__TH&9R)R"KZ!9AQR`B\!2'H!LB\K`!PK0?_P3KKWW$_O``PJR
  588. XM`&`:<@$O`4AM__\O*P`<*T'_\$ZZ]\!/[P`,*@!^_V```.`(ZP`!`!M*!F=2I
  589. XM</^^@&=,5*L`#'(*OH%F)B!K``1#Z``!)TD`!!"\``TB*P`,2H%K"B\++P!A=
  590. XM`/ZN4$]2JP`,(&L`!$/H``$G20`$(`<0@"(K``Q*@6L``1Q^_R`K``20JP`0]
  591. XM*T#_\&=R""L`!@`:9U)(>``"0J<O*P`<3KH-&$_O``PK0/_L2@9G.%.M_^QMT
  592. XM,D*G+RW_["\K`!Q.N@SX2'@``4AM__TO*P`<3KH*D$_O`!A*K`.L9@H0+?_]2
  593. XM<AJP`6?(+RW_\"\K`!`O*P`<3KKVX$_O``PJ`&`">@!P_[J`9@@(ZP`%`!M@/
  594. XM#+JM__!G!@CK``0`&TH&9PXB*P`4)`%$@B="``Q@&`@K``(`&V<(<@`G00`,$
  595. XM8`@B*P`4)T$`#"!K`!`G2``$OH!G+E.K``QM%B!K``1#Z``!)TD`!"`'$(!R#
  596. XM`!(`8!(@!W(`$@`O"R\!80#]D%!/(@!P,,"K`!AG!'#_8`QP_[B`9@1P`&`"4
  597. XM(`1,WPCT3EU.=0T*`````$CG!Q`F;P`4""L`!P`:5L!$`$B`2,`N`'`PP*L`V
  598. XM&&<*0JL`"'#_8``!6`@K``<`&V<4""L`!@`;9PPO"TAX__].NOTB4$]*JP`4$
  599. XM9C9"JP`(""L``@`;9Q)P`2=``!1!ZP`@)T@`$&```(0O"TZZ_)983TJ`9W8(?
  600. XMZP`%`!MP_V```0!*!V=F5*L`""`K``A*@&Y:(&L`!$/H``$G20`$?``<$"`&B
  601. XM#(`````:9RX,@`````UF,E.K``AM%"!K``1#Z``!)TD`!'``$!!@``"T+PMAA
  602. XM`/\N6$]@``"H".L`!``;</]@``"<(`9@``"6""L``0`;9DX(ZP```!LO*P`4T
  603. XM+RL`$"\K`!Q.N@BT3^\`#"H`2H5J!@CK``4`&TJ%9@8(ZP`$`!M*A6\:2@=G'
  604. XM"B`%1(`G0``(8`0G10`((&L`$"=(``1P,L"K`!AG%DH'9PAP_R=```A@!G``>
  605. XM)T``"'#_8"!3JP`(;1(@:P`$0^@``2=)``1P`!`08`@O"V$`_H183TS?".!.O
  606. XM=0``56YK;F]W;B!E<G)O<B!C;V1E``!5<V5R(&ES(&YO="!O=VYE<@!.;R!S1
  607. XM=6-H(&9I;&4@;W(@9&ER96-T;W)Y`$YO('-U8V@@<')O8V5S<P!);G1E<G)U.
  608. XM<'1E9"!S>7-T96T@8V%L;`!)+T\@97)R;W(`3F\@<W5C:"!D979I8V4@;W(@`
  609. XM861D<F5S<P!!<F<@;&ES="!I<R!T;V\@;&]N9P``17AE8R!F;W)M870@97)RQ
  610. XM;W(`0F%D(&9I;&4@;G5M8F5R`$YO(&-H:6QD('!R;V-E<W,``$YO(&UO<F4@!
  611. XM<')O8V5S<V5S(&%L;&]W960`3F\@;65M;W)Y(&%V86EL86)L90!!8V-E<W,@(
  612. XM9&5N:65D`$)A9"!A9&1R97-S`$)U;&L@9&5V:6-E(')E<75I<F5D``!297-ON
  613. XM=7)C92!I<R!B=7-Y``!&:6QE(&%L<F5A9'D@97AI<W1S`$-R;W-S+61E=FEC2
  614. XM92!L:6YK`$YO('-U8V@@9&5V:6-E``!.;W0@82!D:7)E8W1O<GD`27,@82!D[
  615. XM:7)E8W1O<GD``$EN=F%L:60@87)G=6UE;G0``$YO(&UO<F4@9FEL97,@*'5NI
  616. XM:71S*2!A;&QO=V5D`$YO(&UO<F4@9FEL97,@*'5N:71S*2!A;&QO=V5D(&9OE
  617. XM<B!T:&ES('!R;V-E<W,``$YO="!A('1E<FUI;F%L``!497AT(&9I;&4@:7,@8
  618. XM8G5S>0!&:6QE(&ES('1O;R!L87)G90!.;R!S<&%C92!L969T`%-E96L@:7-S'
  619. XM=65D('1O('!I<&4`4F5A9"UO;FQY(&9I;&4@<WES=&5M`%1O;R!M86YY(&QI[
  620. XM;FMS``!"<F]K96X@<&EP90!-871H(&9U;F-T:6]N(&%R9W5M96YT(&5R<F]R8
  621. XM``!-871H(&9U;F-T:6]N(')E<W5L="!I<R!O=70@;V8@<F%N9V4``$CG(#`F*
  622. XM;P`0)$M*$F<D<``0$D'L`HT(,``!"`!G"G(`$@!T()*"8`1R`!(`%(%2BF#82
  623. XM(`M,WPP$3G4``````````'!A(F\`""!O``0@+P`,(@A@!!#99PA3@&3X8`9"^
  624. XM&%.`9/H@`4YU3E7_^$CG`S`F;P`@)&\`)"XO`"@@2DH89OQ3B)'*+`@@2TH8_
  625. XM9OQ3B)'+(`@B2]/`*TG_^+R'8P(L!R`&($I@`A+84X!D^B!M__A",&@`(`M,I
  626. XMWPS`3EU.=2!O``0@"$H89OQ32)'`(`A.=0``(&\`!")O``@2&+(99@A*`6;VE
  627. XM<`!.=6X$</].=7`!3G5(YP$0)F\`#"XO`!!P`!`3L(=F!"`+8`@0&TH`9NYP9
  628. XM`$S?"(!.=4CG`1`F;P`,+B\`$"\'+PMAR%!/3-\(@$YU2.<!,"9O`!`N+P`4H
  629. XME<I*$V<.<``0$["'9@(D2U*+8.X@"DS?#(!.=4Y5__Q(YP`P)F\`%"1O`!A*\
  630. XM$V<@*TK__"!M__Q*$&<0$!"P$V8$(`M@#%*M__Q@Z%*+8-QP`$S?#`!.74YUW
  631. XM2.<`,"9O``PD;P`0+PHO"V&P4$],WPP`3G4O"R9O``AP`!`30>P"C0@P``,(I
  632. XM`&<$4HM@["`+)E].=2`O``@@;P`$3E7_]")/<@I.N@V`!D$`,!+!2H!F\"`)<
  633. XM$.&_R6;Z0A"0CTY=3G4``"`O``@@;P`$3E7_]")/(@`"00`'!D$`,!+!YHAFS
  634. XM\"`)$.&_R6;Z0A"0CTY=3G4``#`Q,C,T-38W.#EA8F-D968@+P`((&\`!$/O/
  635. XM``0R``)!``\2^Q#<Z(AF\B`)(@]8@1#ALHEF^D(0D(%.=4Y5__A(YP$P)F\`]
  636. XM'"1O`"!^`$H39RHK2O_\(&W__$H09PP0$+`39P92K?_\8.P@;?_\2A!F!"`')
  637. XM8`A2AU*+8-(@!TS?#(!.74YU3E7_^$CG`3`F;P`<)&\`('X`2A-G(BM*__P@N
  638. XM;?_\2A!G$!`0L!-F!"`'8`Y2K?_\8.A2AU*+8-H@!TS?#(!.74YU2.<`,"9O-
  639. XM``PD;P`0+PHO"V$`_V)03TS?#`!.=4CG`#`F;P`,)&\`$"\*+PMAD%!/3-\,:
  640. XM`$YU```@;P`$(DAR`'``+P(,$``K9P8,$``M9@)22!`8!```,&T2#```"6X,\
  641. XM)`'E@=*"TH'2@&#F#!$`+68"1($D'R`(4X`@;P`(((&0B4YU2.<#,"9O`!0D"
  642. XM;P`8+B\`'"PO`"`@!PR`````!&=,2H!G$`R`````0&9,".L`!@`;8`8(JP`&7
  643. XM`!L@"F<$2H9N!'``8#HO"TZZ`#Q83PBK``(`&PCK``,`&R!*)T@`!"=(`!`G%
  644. XM1@`4<`!@%"\+3KH`%EA/<`!@"'`6*4`'&'#_3-\,P$YU+PLF;P`(""L``@`;S
  645. XM9P1P`&`^2JL`%&<6""L``P`;9@XO*P`4+RL`$$ZZ`2)03T'K`"`G2``0<``G(
  646. XM0``4<K?#JP`8".L``@`;)T``#"=```@F7TYU3E7_Z$CG`3(N+P`T2H=N!G#_N
  647. XM8```TG`(OH!D`BX`(`=6@"X``D?__"1M``@@;0`(T<??K`$T0^P!,"91*TC_Z
  648. XM\"M)__0@"V<``)`@2R`K``31P"M(_^PB;?_PM\EC$"2+)4<`!"QM__0LBG``D
  649. XM8'BWR68:+%,DCB`K``0B`-*')4$`!"QM__0LBG``8%JUR&0(GZP!-'#_8$ZUD
  650. XMR&8L2I-G#B!3L\AC")^L`31P_V`XWZL`!$J39PZSTV8*("D`!-&K``0FD7``6
  651. XM8!XK2__T*VW_[/_H)E-@`/]N(&W_]""*0I(E1P`$<`!,WTR`3EU.=0``````:
  652. XM````<&%(YP$0)F\`#"XO`!`O!R\+3KK^]E!/3-\(@$YU2.<',"XO`!@F;P`<L
  653. XM+"\`("\'3KH+^%A/)$`@"F8$</]@'B\&+PLO*@`$3KH'_$_O``PJ`$JL`ZQG?
  654. XM!'#_8`(@!4S?#.!.=0``2.<!$"9O``Q*K`<89U@@+`<8L*P!J&X";`1^`&`"Y
  655. XM+@!(;`&`2'@`"DZZ`S9(;`&`+PM.N@+\2&P!@$AZ`#1.N@+P(`?E@$AL`8!!*
  656. XM[`&L+S`(`$ZZ`MQ(;`&`2'@`"DZZ`P!/[P`H("P'&$S?"(!.=3H@````````1
  657. XM``````````!.5?_F2.</,"9O`#HN+P`^0BW__T*L`ZPK;`<8__)Z`[JL`2!L!
  658. XM$B`%YX!![`4(2K`(`&<$4H5@Z"`L`2"PA68,<!@I0`<8</]@``$J(`7G@$'L[
  659. XM!0C1P"1(2JT`$&<(""T``@`39PHK?````^S_[F`(*WP```/N_^X@/```@`#`'
  660. XMK`$XL8<(!P`#9PP@!P)`__PN``!'``(@!W(#P($,@`````)G#`R``````6<$3
  661. XM2H!F!BP'4H9@#'`6*4`'&'#_8```M"`'`H````,`9P``B`@'``IG%AM\``'_&
  662. XM_R\M_^XO"TZZ!Q)03R@`8#P(!P`)9A9(>`/M+PM.N@:T4$\H`$J$:@0(QP`)A
  663. XM"`<`"6<:&WP``?__*6W_\@<8+RW_[B\+3KH'.%!/*`!*+?__9S8@!W)XTH'`<
  664. XM@4J`9RI*A&LF+P1.N@>`2'@#[2\+3KH&8D_O``PH`&`.2'@#[2\+3KH&4%!/>
  665. XM*`!*K`.L9P1P_V`()(8E1``$(`5,WPSP3EU.=0``````````````````````@
  666. XM`'!A2.</$"XO`!@L+P`<*B\`("\'3KH)H%A/)D`@"V8$</]@'B\%+P8O*P`$!
  667. XM3KH%*$_O``PH`$JL`ZQG!'#_8`(@!$S?"/!.=0``2.<#,"XO`!1*AVX&<`!@Z
  668. XM``"D<`B^@&0"+@`@!U:`+@`"1__\1>P!,"92(`MG0"`K``2PAVTRL(=F#"!3*
  669. XM)(B?K`$T(`M@;B`K``20AW((L(%E%B!+T<<DB"1()),E0``$GZP!-"`+8$PDG
  670. XM2R938+P@!R(L`CC0@5.`3KH&KB(L`CA.N@:&+`!0AB`&5H`L``)&__PO!DZZU
  671. XM"AY83R9`(`MG$B\&+PM.NONF+H=A`/]44$]@`G``3-\,P$YU``````````!PU
  672. XM82\'+B\`""\'3KK_,EA/+A].=0``2.<!,"9O`!`D;P`4?@`>&TJ'9Q(O"B\'^
  673. XM3KH`%E!/4H!FZG#_8`)P`$S?#(!.=0``2.<!$"XO``PF;P`0""L`!@`;9Q)PE
  674. XM"KZ`9@PO"R\'3KKOX%!/8#!3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`29
  675. XM(`=R`!(`+PLO`4ZZ[[)03R(`(`%,WPB`3G5(YP$@+B\`#%*L!Q0@;`<04Z@`&
  676. XM#&T6(F@`!$7I``$A2@`$(`<2@'(`$@!@$B`'<@`2`"\(+P%.NN]L4$\B`$S?+
  677. XM!(!.=4Y5``!(YP`P)F\`$"1O`!1"K`<4*4L'$$AM`!`O"DAZ_YQ.NNQP+HM(I
  678. XM>/__3KKO,B`L!Q1,[0P`__A.74YU``!.5?_X2.<`,$?L`3P@"V<,2JL`&&<&Q
  679. XM)$LF4V#P(`MF(DAX`").NOZV6$\F0$J`9@1P`&`<)(MP(7(`($L0P5'(__POG
  680. XM"R\M``PO+0`(3KH`#DSM#`#_\$Y=3G4``$Y5__!(YP\P)F\`-"1O`#A*J@`8O
  681. XM9P@O"DZZ`;)83RHL`:1^`7``$#-X``Q``&)G"@Q``&%F#'H`8`8J/```@`!2%
  682. XMAW(KLC-X`%?`1`!(@$C`*`!P`!`3#$``=V<``(@,0`!R9T(,0`!A9@``ODAX1
  683. XM``PO/```@0(O+0`(3KK[:$_O``PL`'#_O(!F!G``8```T$J$9P9P0-"`8`)P#
  684. XM`BX``$=``&```(A*A&<$<`)@`G```$"``$AX``PO`"\M``A.NOLD3^\`#"P`8
  685. XM</^\@&8&<`!@``",2H1G!G!`T(!@`G`!+@!@2$J$9P1P`F`"<`$`0(```$`!6
  686. XM``!``@!(>``,+P`O+0`(3KKZWD_O``PL`'#_O(!F!'``8$9*A&<&<$#0@&`"_
  687. XM<`(N`&`$<`!@,I'()4@`$'``)4``%"5&`!PE:@`0``0E0``,)4``"$J%9@8@H
  688. XM/```@``B!X*`)4$`&"`*3-\,\$Y=3G4``$CG#S`F;P`<+B\`("1O`"0H"U.'$
  689. XM+`=*AFLT4ZH`"&T2(&H`!$/H``$E20`$<``0$&`(+PI.NN_"6$\J`'#_NH!G=
  690. XM#%.&(`46P'(*NH%FR$(3O(=F!'``8`0@1"`(3-\,\$YU``!(YP,P)F\`%`@K/
  691. XM``$`&V<0+PM(>/__3KKLX%!/+@!@`GX`("L`&$*`9Q1*JP`49PXO*P`4+RL`R
  692. XM$$ZZ^/I03R\K`!Q.N@306$\L`'#_OH!G!DJ&9@)P`$S?#,!.=4CG`Q`N+P`0Y
  693. XM1^P!/"`+9S0(*P`"`!MF*`@K``$`&V<@("L`!)"K`!`L`$J&9Q(O!B\K`!`O'
  694. XM*P`<3KKE+D_O``PF4V#(+P=.N@5\6$],WPC`3G4``$CG-Q`N+P`<)F\`("POH
  695. XM`"1*K`/$9P1.N@340JP#K"(')`LF!BQL!QQ.KO_0*@!P_[J`9@Y.KO]\*4`#]
  696. XMK'`%*4`'&"`%3-\([$YU``!(YS\`+B\`'"PO`"`J+P`D2JP#Q&<$3KH$B$*LY
  697. XM`ZP@!5.`(@<D!B8`+&P''$ZN_[XH`'#_N(!F#DZN_WPI0`.L<!8I0`<8(`4,E
  698. XM@`````)G%@R``````6<(2H!F&"`&8!0@!-"&8`XB!W0`=@`L;`<<3J[_ODS?W
  699. XM`/Q.=0``2.<W$"XO`!PF;P`@+"\`)$JL`\1G!$ZZ!`Q"K`.L(@<D"R8&+&P'B
  700. XM'$ZN_]8J`'#_NH!F#DZN_WPI0`.L<`4I0`<8(`5,WPCL3G4``$CG(Q`F;P`42
  701. XM+B\`&$JL`\1G!$ZZ`\1"K`.L(@LD!RQL!QQ.KO_B+`!*AF823J[_?"E``ZQPL
  702. XM`BE`!QAP_V`"(`9,WPC$3G4``$Y5__Q(YR$0)F\`&$JL`\1G!$ZZ`WQ"K`.LR
  703. XM(@MT_BQL!QQ.KO^L+@!*AV<*(@=.KO^F</]@)B(+)#P```/N3J[_XBX`2H=FP
  704. XM$DZN_WPI0`.L<`(I0`<8</]@`B`'3-\(A$Y=3G5.5?_\2.<A$"9O`!A*K`/$@
  705. XM9P1.N@,80JP#K"(+=/XL;`<<3J[_K"X`2H=G#"('3J[_IB(+3J[_N"(+)#P`5
  706. XM``/N3J[_XBX`2H=F$DZN_WPI0`.L<`(I0`<8</]@`B`'3-\(A$Y=3G4``"\'A
  707. XM+B\`"$JL`\1G!$ZZ`K8B!RQL!QQ.KO_<<``N'TYU2.<P`"0`)@%(0DA#Q,'&2
  708. XMP,#!U$-(0D)"T(),WP`,3G5*@&H``!Y$@$J!:@``#$2!80``($2!3G5A```80
  709. XM1(!$@4YU2H%J```,1(%A```&1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$W
  710. XMP3`"2$`T`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&944,,00@`9```!NF9H
  711. XM64,,02``9```!N6954-*06L```;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(J
  712. XM0<3!D()D```(4T/0@63^<@`R`TA#Y[A(0,%!)A\D'TYU3E7_GDCG,S)^`"!L1
  713. XM`]P>*/__<$^^@&\"+@`@!T/M_Z]@`A+84X!D^D(U>*^3R2QX``1.KO[:)D!*G
  714. XMJP"L9TP@*P"LY8`D0"PJ`#A*AF8$+"L`H$J&9S0B!D'Z`+(D"'8++&P''$ZNM
  715. XM_]`@1U*'(`@;O``*"*\B!D'M_Z\D""8'+&P''$ZN_]!P_V!.2JP'#&820_H`-
  716. XMAG``+'@`!$ZN_=@I0`<,0>W_KRE(`EQ(>``\2'@`^G``+P`O`$AL`GA(;`)DB
  717. XM2&P"4$*G3KH!2$_O`"!3@&<$</]@`G``3-],S$Y=3G4J*B!5<V5R($%B;W)TY
  718. XM(%)E<75E<W1E9"`J*@``0T].5$E.544``$%"3U)4`"HJ*B!"<F5A:SH@`&EN7
  719. XM='5I=&EO;BYL:6)R87)Y````````````````````2.<!$"XO``PO!TZZ`#Q8J
  720. XM3R9`(`MF!'#_8"@(*P`"``-G!G``)H!@&B\K``1.NOV66$]P`":`2JP#K&<$\
  721. XM</]@`G``3-\(@$YU+P<N+P`(<``I0`.L2H=K(KZL`2!L'"`'YX!![`4(2K`(5
  722. XM`&<.(`?G@$'L!0C1P"`(8`AP"2E`!QAP`"X?3G4``$CG`0)P`"(\```P`"QXS
  723. XM``1.KO[.+@`"AP``,`!*AV8$<`!@($JL`\1G&"!L`\1.D$J`9@1P`&`,2'@`;
  724. XM%$ZZ`$983R`'3-]`@$YU8;1.=0``2.<P,BQL!PP@;P`8(F\`'"1O`"`F;P`DR
  725. XM("\`*"(O`"PD+P`P)B\`-$ZN_J1,WTP,3G4``$CG!P`N+P`0("P!(%.`+`!*]
  726. XM1FLP(`9(P.>`0>P%""HP"`!*!6<:"`4``F84(`9(P.>`0>P%""\P"`1.NOQ\E
  727. XM6$]31F#,+P=.NM2V6$],WP#@3G4``$CG`#(F;`<@(`MG%"13(DL@*P`(+'@`$
  728. XM!$ZN_RXF2F#HD<@I2`<D*4@'($S?3`!.=4CG`3(N+P`4<`S>@"`'<@`L>``$:
  729. XM3J[_.B9`(`MF!'``8#HG1P`(1>P'("!J``0G2``$D<@FB$J29@(DBTJJ``1GB
  730. XM!B)J``0BBR5+``1*K`$D9@0I2P$D0>L`#"`(3-],@$YU````````````````O
  731. XM``````/L````!@````````N.```+?@``"V8```J8```*B```"G`````"````X
  732. XM`@````P````&`````````_(```/I`````````_(```/J````Y0D@````````E
  733. XM````````````````8W5T(&9A:6QE9```0F%D(&AE>"!C:&%R"@!"860@;V-TR
  734. XM86P@8VAA<@H`8SID.F8Z<W4``%5S86=E.@DE<R`M8VQI<W0@6V9I;&5S70H)2
  735. XM)7,@+69L:7-T(%LM9&-H87)=(%LM<W5=(%MF:6QE<UT*`'(`17)R;W(@;W!E0
  736. XM;FEN9R`E<P````````````$````!`````2TM```Z(&EL;&5G86P@;W!T:6]NN
  737. XM("TM(```.B!I;&QE9V%L(&]P=&EO;B`M+2``````.B!O<'1I;VX@<F5Q=6ER,
  738. XM97,@86X@87)G=6UE;G0@+2T@`#H@;W!T:6]N(')E<75I<F5S(&%N(&%R9W5M2
  739. XM96YT("TM(````````"@`````````````````````````````@`````%>````H
  740. XM```````````````````````````````````````!@```````````````````!
  741. XM`````````````````````````````````````````````````````````````
  742. XM````````````@``````B```7/```%U```!=B```7?```%XP``!>D```7K@``+
  743. XM%\@``!?>```7\```&````!@2```8+```&$```!A.```86@``&'```!B"```8+
  744. XME@``&*@``!BX```8R```&-@``!CJ```9"```&3@``!E(```96@``&6P``!EZ6
  745. XM```9C@``&:0``!FT```9P```&=X```0`__\````.``X````````JW`````#_D
  746. XM_P````0`!``````````````"//__````!``$````````*O@`````__\````$O
  747. XM``0````````K`@``````("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@9
  748. XM("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!:
  749. XM`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@(">
  750. XM`@("$!`0$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`06
  751. XM$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!9
  752. XM`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0=
  753. XM(````````@````/L````)@````````*$```"<````D@```(T```",````BP`/
  754. XM``(H```")````B````(<```"&````A0```(0```"#````@@```($```"````R
  755. XM`?P```'X```!]````?````'L```!Z````>0```'@```!W````=@```'4```!$
  756. XMT````<P```'(```!Q````<````&\```!N````;0```&P```!K`````,````"Z
  757. X4```"8````5X```$\`````````_*\O
  758. X``
  759. Xend
  760. Xsize 12800
  761. SHAR_EOF
  762. echo "extracting du.c"
  763. sed 's/^X//' << \SHAR_EOF > du.c
  764. X#include <exec/types.h>
  765. X#include <string.h>
  766. X#include <proto/exec.h>
  767. X#include <proto/dos.h>
  768. X#include <libraries/dos.h>
  769. X
  770. XBPTR stdin, stdout;
  771. Xint subdisp = TRUE, verbose = FALSE;
  772. X
  773. Xchar *error_message[] = {
  774. X   "No default directory", /* 201 */
  775. X   "Object in use",
  776. X   "Object exists",
  777. X   "Directory not found",
  778. X   "Object not found",
  779. X   "Bad stream name",
  780. X   "Object too large",
  781. X   "Unknown error 208",
  782. X   "Action not known",
  783. X   "Invalid component name",
  784. X   "Invalid lock",
  785. X   "Object is of wrong type",
  786. X   "Disk not validated",
  787. X   "Disk write protected",
  788. X   "Rename across devices",
  789. X   "Directory not empty",
  790. X   "Too many levels",
  791. X   "Device not mounted",
  792. X   "Seek error",
  793. X   "Comment too big",
  794. X   "Disk full",
  795. X   "Delete protected",
  796. X   "Write protected",
  797. X   "Read protected",
  798. X   "Not a DOS disk",
  799. X   "No disk"
  800. X};
  801. X
  802. Xvoid MemCleanup() { }
  803. X
  804. Xvoid disp_error(int err, char *s)
  805. X{
  806. X   printf("%ls -- ", s);
  807. X
  808. X   if (err >= 201 && err <= 226)
  809. X      printf(error_message[err - 201]);
  810. X   else
  811. X      switch (err) {
  812. X         case 0:
  813. X            printf("No error!!!");
  814. X            break;
  815. X         case ERROR_NO_FREE_STORE:
  816. X            printf("No free store");
  817. X            break;
  818. X         case ERROR_NO_MORE_ENTRIES:
  819. X            printf("No more entries");
  820. X            break;
  821. X         default:
  822. X            printf("Unknown error %ld", err);
  823. X            break;
  824. X      }
  825. X   putchar('\n');
  826. X}
  827. X
  828. Xchar *pathcat(to,from)
  829. Xregister char to[], from[];
  830. X{
  831. X   register int l;
  832. X
  833. X   l = strlen(to) - 1;
  834. X   if (l < 0 || to[l] == ':' || to[l] == '/')
  835. X      strcat(to,from);
  836. X   else
  837. X      strcat(strcat(to, "/"), from);
  838. X
  839. X   return (to);
  840. X}
  841. X
  842. Xstruct FileInfoBlock *GetInfo(char *name, long access, BPTR *lock)
  843. X{
  844. X   struct FileInfoBlock *fib;
  845. X
  846. X   *lock = Lock(name, access);
  847. X   if (*lock == NULL)
  848. X      return (NULL);
  849. X
  850. X   fib = (struct FileInfoBlock *)AllocMem(sizeof(struct FileInfoBlock), 0);
  851. X   if (fib == NULL) {
  852. X      UnLock(*lock);
  853. X      return (NULL);
  854. X   }
  855. X
  856. X   if (Examine(*lock, fib)) return (fib);
  857. X   return (NULL);
  858. X}
  859. X
  860. Xvoid FreeInfo(struct FileInfoBlock *fib, BPTR lock)
  861. X{
  862. X   FreeMem((char *)fib, sizeof(struct FileInfoBlock));
  863. X   UnLock(lock);
  864. X}
  865. X
  866. Xint check_size(char *name, long *bytes, long *blocks, long *files, int display)
  867. X     
  868. X{
  869. X   struct FileInfoBlock *fib;
  870. X   BPTR l;
  871. X   int err = 0;
  872. X   long byt = 0, blk = 0, fil = 0;
  873. X
  874. X   fib = GetInfo(name, SHARED_LOCK, &l);
  875. X   if (fib == NULL)
  876. X      return (IoErr());
  877. X
  878. X   if (fib->fib_DirEntryType > 0) /* Directory */
  879. X   {
  880. X      while (err == 0 && ExNext(l, fib)) /* Scan all files */
  881. X      {
  882. X         byt += fib->fib_Size;
  883. X         blk += fib->fib_NumBlocks + 1;
  884. X
  885. X         if (fib->fib_DirEntryType > 0) /* File is a directory */
  886. X         {
  887. X            int len = strlen(name) + strlen(fib->fib_FileName) + 2;
  888. X            char *newname = AllocMem(len, 0);
  889. X
  890. X            if (newname)
  891. X            {
  892. X               pathcat(strcpy(newname, name), fib->fib_FileName);
  893. X               err = check_size(newname, &byt, &blk, &fil, subdisp);
  894. X               FreeMem(newname, len);
  895. X            }
  896. X            else err = ERROR_NO_FREE_STORE;
  897. X         }
  898. X         else fil++;
  899. X      }
  900. X   }
  901. X   else
  902. X   {
  903. X      byt = fib->fib_Size;
  904. X      blk = fib->fib_NumBlocks + 1;
  905. X      fil = 1;
  906. X   }
  907. X   if (err == 0) err = IoErr();
  908. X
  909. X   FreeInfo(fib, l);
  910. X
  911. X   if (err != ERROR_NO_MORE_ENTRIES) {
  912. X      return (err);
  913. X   }
  914. X   if (display)
  915. X   {
  916. X      char *dirname = *name ? name : ".";
  917. X
  918. X      if (verbose)
  919. X         printf("%ls: %ld bytes, approximately %ld blocks in %ld files\n",
  920. X                dirname, byt, blk, fil);
  921. X      else
  922. X         printf("%ld\t%ls\n", blk, dirname);
  923. X   }
  924. X   *bytes += byt;
  925. X   *blocks += blk;
  926. X   *files += fil;
  927. X
  928. X   return 0;
  929. X}
  930. X
  931. X/* du [-s] [-v] [names] */
  932. Xint analyse_opts(int argc, char **argv, int *nargc, char ***nargv)
  933. X{
  934. X   char *pname = *argv;
  935. X
  936. X   argv++;
  937. X   argc--;
  938. X
  939. X   while (argc != 0 && **argv == '-')
  940. X   {
  941. X      if ((*argv)[2] == '\0')
  942. X         switch ((*argv)[1])
  943. X         {
  944. X            case 's':
  945. X               subdisp = FALSE;
  946. X               break;
  947. X            case 'v':
  948. X               verbose = TRUE;
  949. X               break;
  950. X            default:
  951. X               goto help;
  952. X         }
  953. X      else
  954. X         goto help;
  955. X
  956. X      argv++; argc--;
  957. X   }
  958. X   *nargc = argc; *nargv = argv;
  959. X   return TRUE;
  960. X
  961. Xhelp:
  962. X   printf("Usage: %ls [-s] [-v] [names]\n", pname);
  963. X   return FALSE;
  964. X}
  965. X
  966. Xvoid main(int argc, char *argv[])
  967. X{
  968. X   int err;
  969. X   long bytes = 0, blocks = 0, files = 0;
  970. X
  971. X   stdin = Input();
  972. X   stdout = Output();
  973. X
  974. X   if (analyse_opts(argc, argv, &argc, &argv))
  975. X   {
  976. X      if (argc == 0)
  977. X         err = check_size("", &bytes, &blocks, &files, TRUE);
  978. X      else
  979. X         do
  980. X         {
  981. X            bytes = blocks = files = 0;
  982. X            err = check_size(*argv, &bytes, &blocks, &files, TRUE);
  983. X         }
  984. X         while ((argv++, --argc) && err == 0);
  985. X
  986. X      if (err) disp_error(err, "failed");
  987. X   }
  988. X}
  989. X
  990. SHAR_EOF
  991. echo "extracting du.doc.uu"
  992. sed 's/^X//' << \SHAR_EOF > du.doc.uu
  993. X
  994. Xbegin 644 du.doc
  995. XM"B`@("`@1%4H,2D@("`@("`@("`@("`@("`@("`@("`@("!5<V5R(&UA;G5A6
  996. XM;"`@("`@("`@("`@("`@("`@("`@("`@("!$52@Q*0H*"@H@("`@()LQ;4Y!W
  997. XM344*("`@("`@("`@()LP;61U("T@<W5M;6%R:7-E(&1I<VL@=7-A9V4*"B`@$
  998. XM("`@FS%M4UE.3U!325,*("`@("`@("`@(&1U()LP;5L@+9LQ;7,@FS!M72!;@
  999. XM("V;,6UV()LP;5T@6R!N86UE<R!="@H@("`@()LQ;41%4T-225!424]."B`@8
  1000. XM("`@("`@("";,&V;-&UD=9LP;2!R97!O<G1S('1H92!N=6UB97(@;V8@8FQO0
  1001. XM8VMS(&-O;G1A:6YE9"!I;B!T:&4@9&ER96-T;W)I97,*("`@("`@("`@('-P8
  1002. XM96-I9FEE9"!I;B`@FS1M;F%M97.;,&TN("`@($EF("!N;VYE("!A<F4@<W!EU
  1003. XM8VEF:65D+"!T:&4@8W5R<F5N=`H@("`@("`@("`@9&ER96-T;W)Y(&ES('5SW
  1004. XM960N"@H@("`@("`@("`@5&AE(&9O;&QO=VEN9R!O<'1I;VYS(&%R92!R96-OJ
  1005. XM9VYI<V5D.@H*("`@("`@("`@("V;,6USH)LP;:"@('1H92!T;W1A;',@9F]RX
  1006. XM('1H92!S=6(M9&ER96-T;W)I97,@(&%R92`@;F]T("!P<FEN=&5D+`H@("`@*
  1007. XM("`@("`@("`@("!O;FQY('1H92!G<F%N9"!T;W1A;"!F;W(@96%C:"!D:7)E/
  1008. XM8W1O<GD@:6X@FS1M;F%M97.;,&TN"@H@("`@("`@("`@+9LQ;7:@FS!MH*`@F
  1009. XM('-W:71C:&5S("!O;B`@=F5R8F]S92!M;V1E+"!W:&5R92!T:&4@;G5M8F5R3
  1010. XM(&]F(&9I;&5S"B`@("`@("`@("`@("`@(&%N9"!B>71E<R!I<R!A;'-O(&=I'
  1011. XM=F5N+@H*("`@("";,6U"54=3"B`@("`@("`@("";,&U4:&4@<VEZ97,@;V8@;
  1012. XM9FEL97,@9VEV96X@87,@87)G=6UE;G1S(&%R92!N;W0@;&ES=&5D+@H*("`@&
  1013. XM("`@("`@()LT;61UFS!M(&%S<W5M97,@=&AA="!E86-H(&9I;&4@:&5A9&5R9
  1014. XM(&-O;G-U;65S("!O;F4@(&)L;V-K+"`@=&AI<PH@("`@("`@("`@;6%Y(&YO,
  1015. XM="!N96-E<W-A<FEL>2!B92!T<G5E+@H*("`@("`@("`@(%1H92!C=7)R96YT#
  1016. XM(&1I<F5C=&]R>2!I<R!P<FEN=&5D(&%S("XL(&YO="!A<R!A(&)L86YK+@H*%
  1017. XL"B`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@+3$M"@H*S
  1018. X``
  1019. Xend
  1020. Xsize 1034
  1021. SHAR_EOF
  1022. echo "extracting du.uu"
  1023. sed 's/^X//' << \SHAR_EOF > du.uu
  1024. X
  1025. Xbegin 644 du
  1026. XM```#\P`````````#``````````(```'J`````````-$```/I```!ZB1()`!)G
  1027. XM^0````!'^0```NQR`"`\````%F`")L%1R/_\+'@`!"E.`R0I3P,L0JP#*"9N"
  1028. XM`11P`"(\```P`$ZN_LXI:P"8`R!*JP"L9P``<"`/D*\`!`:`````@"E``O!A6
  1029. XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)`S30@5*`0F=2@`)`__Z?P%6`C
  1030. XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z
  1031. XM``!X*6L`.@+P<']2@-&L`O!A``#"0>L`7$ZN_H!!ZP!<3J[^C"E``R@O`"1`"
  1032. XM("H`)&<2+&P#0"!`(B@``"E!`R!.KO^"(BH`(&<:)#P```/M3J[_XBE``S!G3
  1033. XM"N6(($`G:``(`*0@;`,H+PA(;`+L(&@`)"EH``0#-$ZZ!91.N@64<`!@!"`O_
  1034. XM``0O`"`L`QAG!"!`3I!.N@!<+'@`!")L`T!.KOYB3KH%:DJL`RAG&B(L`S!G]
  1035. XM!$ZN_]PL>``$3J[_?")L`RA.KOZ&(!\N;`,L3G5P9&"T0_H`$'``3J[]V"E`=
  1036. XM`T!G[$YU9&]S+FQI8G)A<GD`3G5.50``+P<N+P`,+RT`#$AL`C1.N@2R4$]PF
  1037. XM-D8`OH!M''!QT("^@&X4(`?E@$'L_J@O,`@`3KH$D%A/8$8@!PR`````Z&<D)
  1038. XM#(````!G9Q!*@&8D2&P"/$ZZ!&Y83V`D2&P"2$ZZ!&)83V`82&P"5DZZ!%98F
  1039. XM3V`,+P=(;`)F3KH$2%!/2'@`"DZZ!%HN+?_\3EU.=4Y5__A(YP$P)F\`'"!+*
  1040. XM2AAF_%.(D<L@""X`4X=M$B1+U<<0$G(ZL`%G!G(OL`%F#B\M``PO"TZZ!1A0^
  1041. XM3V`82&P">"\+3KH%"BZM``PO`$ZZ!0!/[P`,(`M,WPR`3EU.=4Y5``!(YR`RG
  1042. XM)F\`&"1O`"`B"R0M``PL;`-`3J[_K"2`9@1P`&`Z(#P```$$<@`L>``$3J[_Z
  1043. XM.B9`(`MF#B(2+&P#0$ZN_Z9P`&`6(A(D"RQL`T!.KO^:2H!G!"`+8`)P`$S?%
  1044. XM3`1.74YU3E4``"\.(FT`""`\```!!"QX``1.KO\N(BT`#"QL`T!.KO^F+%].7
  1045. XM74YU3E7_W$CG(3(F;P!`?@!P`"M`__`K0/_L*T#_Z$AM__1(>/_^+PMA`/]&J
  1046. XM3^\`#"1`2H!F#"QL`T!.KO]\8``!<"`J``1*@&\``,)@``"D("H`?-&M__`@M
  1047. XM*@"`4H#1K?_L("H`!$J`;P``A"!+2AAF_%.(D<M#Z@`(+$E*'F;\4XZ=R2`(Y
  1048. XM(@[0@52`+T``&"])`!QR`"QX``1.KO\Z+T``%$J`9T0@2R)`$MAF_"!`+R\`.
  1049. XM'"\(80#^6"ZL``!(;?_H2&W_[$AM__`O+P`H80#_,D_O`!@N`")O`!0@+P`8L
  1050. XM+'@`!$ZN_RY@"'YG8`12K?_H2H=F+"(M__0D"BQL`T!.KO^42H!F`/](8!8K]
  1051. XM:@!\__`@*@"`4H`K0/_L<`$K0/_H2H=F"BQL`T!.KO]\+@`O+?_T+PIA`/Z@2
  1052. XM4$]P=-"`OH!G!"`'8&A*K0`89T)*$V<$($M@!$'L`GHD2$JL``1G'"\M_^@O^
  1053. XM+?_L+RW_\"\*2&P"?$ZZ`<Y/[P`48!(O"B\M_^Q(;`*T3KH!ND_O``P@+?_P<
  1054. XM(&T`#-&0("W_["!M`!#1D"`M_^@@;0`4T9!P`$S?3(1.74YU3E7_\$CG`3`F7
  1055. XM;0`,+BT`""!31>L`!%.'+T@`#&`H2BL``F8^$"L``4B`#$``=F<,#$``<V8L-
  1056. XM0JP``&`&<`$I0``$6(I3ATJ'9P@F4G`ML!-GS"!M`!`@AR!M`!0@BG`!8`XO6
  1057. XM+P`,2&P"ODZZ`2!P`$SM#(#_Y$Y=3G5.5?_P2.<!`G``*T#_^"M`__0K0/_PL
  1058. XM+&P#0$ZN_\HI0`,X3J[_Q"E``SQ(;0`,2&T`""\M``PO+0`(80#_2D_O`!!*W
  1059. XM@&=R2JT`"&8@2'@``4AM__!(;?_T2&W_^$AL`MQA`/UN3^\`%"X`8#QP`"M`L
  1060. XM__`K0/_T*T#_^$AX``%(;?_P2&W_]$AM__@@;0`,+Q!A`/T^3^\`%"X`6*T`A
  1061. XM#%.M``AG!$J'9\1*AV<,2&P"WB\'80#[F%!/3-]`@$Y=3G4``$CG`#HH;P`4)
  1062. XM(&\`&")O`!Q%^@`Z3^__="9/+'D````$3J[]]G#_2AM7R/_\1H!G$B\`2&\`>
  1063. XM!$A43KD```:L3^\`#$_O`(Q,WUP`3G46P$YU("\`!$AO``@O`"\Y```#/$ZY_
  1064. XM```&)$_O``Q.=1`O``=(@$C`+P!(>0```NA.N0``!G10CTYU``!(YS`"+'D`0
  1065. XM``-`3.\`#@`03J[_T$S?0`Q.=0``3G5.=4Y5_W1(YP$P)F\`H'X`<""^@&P`*
  1066. XM`((0$W(@L`%G#'()L`%G!G(*L`%F!%*+8.A*$V=D(`?E@%*'0>W_=-'`)$AP+
  1067. XM(K`39B92BR2+2A-G"G`BL!-G!%*+8/)*$V8,2'@``4ZZ^A!83V"F0AM@HB2+7
  1068. XM2A-G&!`3<B"P`6<0<@FP`6<*<@JP`6<$4HM@Y$H39@)@!D(;8`#_>DJ'9P9!O
  1069. XM[?]T8`0@;`,H+P@O!TZZ_>Q"ETZZ^<),[0R`_VA.74YU````````<&$B;P`(Y
  1070. XM(&\`!"`(2AAF_%.($-EF_$YU``````/L`````P````````:B```&A@``!EX`R
  1071. XM```%`````@``!K(```:<```&@`````P````&`````````_(```/I````````:
  1072. XM`_(```/J````NP````$`````3F\@9&5F875L="!D:7)E8W1O<GD``$]B:F5CX
  1073. XM="!I;B!U<V4`3V)J96-T(&5X:7-T<P!$:7)E8W1O<GD@;F]T(&9O=6YD`$]B"
  1074. XM:F5C="!N;W0@9F]U;F0``$)A9"!S=')E86T@;F%M90!/8FIE8W0@=&]O(&QA]
  1075. XM<F=E``!5;FMN;W=N(&5R<F]R(#(P.`!!8W1I;VX@;F]T(&MN;W=N``!);G9A<
  1076. XM;&ED(&-O;7!O;F5N="!N86UE``!);G9A;&ED(&QO8VL``$]B:F5C="!I<R!O?
  1077. XM9B!W<F]N9R!T>7!E`$1I<VL@;F]T('9A;&ED871E9```1&ES:R!W<FET92!P%
  1078. XM<F]T96-T960``%)E;F%M92!A8W)O<W,@9&5V:6-E<P!$:7)E8W1O<GD@;F]T&
  1079. XM(&5M<'1Y`%1O;R!M86YY(&QE=F5L<P!$979I8V4@;F]T(&UO=6YT960``%-E6
  1080. XM96L@97)R;W(``$-O;6UE;G0@=&]O(&)I9P!$:7-K(&9U;&P`1&5L971E('!RD
  1081. XM;W1E8W1E9```5W)I=&4@<')O=&5C=&5D`%)E860@<')O=&5C=&5D``!.;W0@4
  1082. XM82!$3U,@9&ES:P``3F\@9&ES:P`````(````'@```"P````Z````3@```&``T
  1083. XM``!P````@@```)0```"F````O@```,P```#D````^````0X```$D```!.```_
  1084. XM`4@```%<```!:````7@```&"```!E````:0```&T```!Q"5L<R`M+2``3F\@Z
  1085. XM97)R;W(A(2$`3F\@9G)E92!S=&]R90!.;R!M;W)E(&5N=')I97,`56YK;F]W%
  1086. XM;B!E<G)O<B`E;&0`+P`N`"5L<SH@)6QD(&)Y=&5S+"!A<'!R;WAI;6%T96QY?
  1087. XM("5L9"!B;&]C:W,@:6X@)6QD(&9I;&5S"@``)6QD"25L<PH``%5S86=E.B`E\
  1088. XM;',@6RUS72!;+79=(%MN86UE<UT*````9F%I;&5D`````"5L8P````/L````0
  1089. XM&@````(```(P```"+````B@```(D```"(````AP```(8```"%````A````(,<
  1090. XM```""````@0```(````!_````?@```'T```!\````>P```'H```!Y````>``*
  1091. X;``'<```!V````=0```'0```!S`````````/R>
  1092. X``
  1093. Xend
  1094. Xsize 2952
  1095. SHAR_EOF
  1096. echo "extracting getoptx.3"
  1097. sed 's/^X//' << \SHAR_EOF > getoptx.3
  1098. X.TH GETOPTX 3 local
  1099. X.SH NAME
  1100. Xgetoptx - decode command line options
  1101. X.SH SYNOPSIS
  1102. X.B "char getoptx(argc, argv, optstring)
  1103. X  int argc;
  1104. X  char *argv[];
  1105. X  char *optstring;
  1106. X  extern int optind, opterr;
  1107. X  extern char *optarg;
  1108. X.SH DESCRIPTION
  1109. X.I getoptx
  1110. Xreturns a character which is either (a) one of the known option characters
  1111. Xspecified in
  1112. X.IR optstring ,
  1113. X(b) a question mark character (?) if the option is unknown or
  1114. Xincorrectly specified, or
  1115. X.B EOF
  1116. Xif all options have been returned. If the caller has specified that an
  1117. Xoption requires or accepts an argument, the string value of the argument
  1118. Xis returned in
  1119. X.IR optarg .
  1120. XIn the case of an optional argument
  1121. X.I optarg
  1122. Xmay point to an empty ("") string.
  1123. X.SS Format of optstring
  1124. X.I optstring
  1125. Xcontains the values of the option characters which are recognized. In
  1126. Xaddition any character may be followed by a colon (:) is it requires an
  1127. Xargument, or an asterisk (*) if it accepts an optional argument.
  1128. X.SS Format of the command line
  1129. XThe command line parsed by
  1130. X.I getoptx
  1131. Xconsists of the command name, followed by zero or more options separated
  1132. Xby blanks, followed by arguments to the command. The options are ended
  1133. Xby any of (a) the end of data on the command line, (b) a token which
  1134. Xdoes not start with a hyphen (-), or (c) the special token --.
  1135. X.SS Using ? as a valid option
  1136. XAlthough
  1137. X.I getoptx
  1138. Xreturns the ? as an indication of an unknown option, or one used
  1139. Xwithout a required argument, the ? may be included in the
  1140. X.I optstr
  1141. Xso that ? becomes a known option. The effect is that specifying any
  1142. Xinvalid option will generate an error message, while using -? as an
  1143. Xoption does not. In either case a ? returned from
  1144. X.I getoptx
  1145. Xcan be used to display a usage message.
  1146. X.br
  1147. X.ne 1.5i
  1148. X.SH EXAMPLES
  1149. X.tr ~
  1150. X cval = getoptx(argc, argv, "al:sD*");
  1151. X
  1152. XThe options 'a' and 's' are returned without arguments. The option 'l'
  1153. Xrequires an argument, which may be part of the same command line token
  1154. Xas the option (as:~-l40) or as the following token (as:~-c~40). The
  1155. Xoption 'D' may be immediately followed by an argument, and if there is
  1156. Xno argument it must be the last option in the token.
  1157. X.br
  1158. X.ne 1.5i
  1159. X.SH WARNINGS
  1160. XA warning message is displayed on
  1161. X.B stderr
  1162. Xand the character ? is returned is either (a) an option character not in
  1163. X.I optstr
  1164. Xis found, or (b) a known option which requires an argument does not have
  1165. Xone. If the variable
  1166. X.I opterr
  1167. Xis set to zero the warning message will not be displayed.
  1168. X.br
  1169. X.ne 1.5i
  1170. X.SH SEE ALSO
  1171. X.SH LIMITATIONS
  1172. XThe characters colon (:) and asterisk (*) may not be option characters.
  1173. X.br
  1174. X.ne 1.5i
  1175. X.SH AUTHOR
  1176. XMan page by Bill Davidsen (davidsen@crdos1.crd.ge.com). Original getopt
  1177. Xsource attributed to AT&T public domain version from 1985 UNIFORUM,
  1178. Xchanges by Bill Davidsen. All original work by Bill Davidsen is hereby
  1179. Xplaced in the public domain.
  1180. SHAR_EOF
  1181. echo "extracting getoptx.c"
  1182. sed 's/^X//' << \SHAR_EOF > getoptx.c
  1183. X/*
  1184. X**      @(#)getopt.c    2.5 (smail) 9/15/87
  1185. X*/
  1186. X
  1187. X/*
  1188. X *  NOTE: this source has been hacked to allow * in the optstring,
  1189. X *  meaning "an optional argument which must follow the option
  1190. X *  character without a blank." Read the comments following with
  1191. X *  that in mind.
  1192. X *    bill davidsen (davidsen@crdos1.crd.ge.com) June 1989
  1193. X */
  1194. X
  1195. X#define OptArgFlg '*'
  1196. X
  1197. X/*
  1198. X * Here's something you've all been waiting for:  the AT&T public domain
  1199. X * source for getopt(3).  It is the code which was given out at the 1985
  1200. X * UNIFORUM conference in Dallas.  I obtained it by electronic mail
  1201. X * directly from AT&T.  The people there assure me that it is indeed
  1202. X * in the public domain.
  1203. X *
  1204. X * There is no manual page.  That is because the one they gave out at
  1205. X * UNIFORUM was slightly different from the current System V Release 2
  1206. X * manual page.  The difference apparently involved a note about the
  1207. X * famous rules 5 and 6, recommending using white space between an option
  1208. X * and its first argument, and not grouping options that have arguments.
  1209. X * Getopt itself is currently lenient about both of these things White
  1210. X * space is allowed, but not mandatory, and the last option in a group can
  1211. X * have an argument.  That particular version of the man page evidently
  1212. X * has no official existence, and my source at AT&T did not send a copy.
  1213. X * The current SVR2 man page reflects the actual behavor of this getopt.
  1214. X * However, I am not about to post a copy of anything licensed by AT&T.
  1215. X */
  1216. X
  1217. X/* for SysV use strchr instead of index */
  1218. X#if defined(USG) || defined(AMIGA)
  1219. X#define index   strchr
  1220. X#define rindex strrchr
  1221. X#endif
  1222. X
  1223. X/*LINTLIBRARY*/
  1224. X#define NULL    0
  1225. X#define EOF     (-1)
  1226. X#define ERR(s, c)      if(opterr){\
  1227. X        extern int write();\
  1228. X        char errbuf[2];\
  1229. X        errbuf[0] = c; errbuf[1] = '\n';\
  1230. X        (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
  1231. X        (void) write(2, s, (unsigned)strlen(s));\
  1232. X        (void) write(2, errbuf, 2);}
  1233. X.
  1234. Xextern char *index();
  1235. X
  1236. Xint     opterr = 1;
  1237. Xint     optind = 1;
  1238. Xint     optopt;
  1239. Xchar    *optarg;
  1240. X
  1241. Xint
  1242. Xgetoptx(argc, argv, opts)
  1243. Xint     argc;
  1244. Xchar    **argv, *opts;
  1245. X{
  1246. X        static int sp = 1;
  1247. X        register int c, ch;
  1248. X        register char *cp;
  1249. X
  1250. X        if(sp == 1)
  1251. X                if(optind >= argc ||
  1252. X                   argv[optind][0] != '-' || argv[optind][1] == '\0')
  1253. X                        return(EOF);
  1254. X                else if(strcmp(argv[optind], "--") == NULL) {
  1255. X                        optind++;
  1256. X                        return(EOF);
  1257. X                }
  1258. X.
  1259. X        optopt = c = argv[optind][sp];
  1260. X        if(c == ':' || c == OptArgFlg || (cp=index(opts, c)) == NULL) {
  1261. X                ERR(": illegal option -- ", c);
  1262. X                if(argv[optind][++sp] == '\0') {
  1263. X                        optind++;
  1264. X                        sp = 1;
  1265. X                }
  1266. X                return('?');
  1267. X        }
  1268. X        if((ch = *++cp) == OptArgFlg) {
  1269. X                if(argv[optind][sp+1] != '\0')
  1270. X                        optarg = &argv[optind++][sp+1];
  1271. X                else {
  1272. X                        optarg = "";
  1273. X                        optind++;
  1274. X                        sp = 1;
  1275. X                }
  1276. X        }
  1277. X        else if(ch == ':') {
  1278. X                if(argv[optind][sp+1] != '\0')
  1279. X                        optarg = &argv[optind++][sp+1];
  1280. X                else if(++optind >= argc) {
  1281. X                        ERR(": option requires an argument -- ", c);
  1282. X                        sp = 1;
  1283. X                        return('?');
  1284. X                } else
  1285. X                        optarg = argv[optind++];
  1286. X                sp = 1;
  1287. X        } else {
  1288. X                if(argv[optind][++sp] == '\0') {
  1289. X                        sp = 1;
  1290. X                        optind++;
  1291. X                }
  1292. X                optarg = NULL;
  1293. X        }
  1294. X        return(c);
  1295. X}
  1296. SHAR_EOF
  1297. echo "extracting lmkfile"
  1298. sed 's/^X//' << \SHAR_EOF > lmkfile
  1299. Xall: cut tee tail du
  1300. X    echo "All done"
  1301. X
  1302. Xcut: cut.c getoptx.o
  1303. X    lc -v -O -Lcdv+getoptx.o cut
  1304. X
  1305. Xgetoptx.o: getoptx.c
  1306. X    lc -v -O getoptx
  1307. X
  1308. X
  1309. Xtee: tee.c
  1310. X    lc -v -O -Lcdv tee
  1311. X
  1312. Xtail: tail.c
  1313. X    lc -v -O -Lcdv tail
  1314. X
  1315. Xdu: du.c
  1316. X    lc -v -O du
  1317. X    blink from lib:c.o+du.o to du lib lib:amiga.lib+lib:lc.lib define __main =
  1318. X__tinymain sc sd nd
  1319. X
  1320. Xcode:
  1321. X    uuencode cut cut >cut.uu
  1322. X    uuencode tee tee >tee.uu
  1323. X    uuencode tail tail >tail.uu
  1324. X    uuencode du du >du.uu
  1325. X    uuencode cut.doc cut.doc >cut.doc.uu
  1326. X    uuencode tee.doc tee.doc >tee.doc.uu
  1327. X    uuencode tail.doc tail.doc >tail.doc.uu
  1328. X    uuencode du.doc du.doc >du.doc.uu
  1329. X
  1330. Xdecode:
  1331. X    uudecode cut.doc.uu
  1332. X    uudecode tee.doc.uu
  1333. X    uudecode tail.doc.uu
  1334. X    uudecode du.doc.uu
  1335. X    uudecode cut.uu
  1336. X    uudecode tee.uu
  1337. X    uudecode tail.uu
  1338. X    uudecode du.uu
  1339. X
  1340. Xshar:
  1341. X    shar -p X README cut.c cut.doc.uu cut.uu tee.c tee.doc.uu tee.uu tail.c tai
  1342. Xl.doc.uu tail.uu du.c du.doc.uu du.uu getoptx.3 getoptx.c lmkfile >utils.shar
  1343. X
  1344. X
  1345. SHAR_EOF
  1346. echo "extracting tail.c"
  1347. sed 's/^X//' << \SHAR_EOF > tail.c
  1348. X#include <stdio.h>
  1349. X#include <string.h>
  1350. X#include <stdlib.h>
  1351. X#include <ctype.h>
  1352. X
  1353. X#define BUG
  1354. X#define LINESIZE 256
  1355. X#define FALSE 0
  1356. X#define TRUE 1
  1357. X
  1358. XFILE *in;
  1359. Xlong nb = 10;
  1360. Xint charmode = FALSE;
  1361. Xint keeplast = TRUE;
  1362. X
  1363. Xvoid charnofirst()
  1364. X{
  1365. X    int c;
  1366. X
  1367. X    while (--nb > 0 && getc(in) != EOF) ;
  1368. X
  1369. X    while ((c = getc(in)) != EOF && putchar(c) != EOF) ;
  1370. X}
  1371. X
  1372. Xvoid linenofirst()
  1373. X{
  1374. X    char buf[LINESIZE + 1]; /* Ensure NULL byte at end ... */
  1375. X
  1376. X    while (--nb > 0 && fgets(buf, LINESIZE, in)) ;
  1377. X
  1378. X    while (fgets(buf, LINESIZE, in) && fputs(buf, stdout) == 0) ;
  1379. X}
  1380. X
  1381. Xvoid charlast()
  1382. X{
  1383. X    char *buf;
  1384. X    int buffull;
  1385. X    long readsize;
  1386. X
  1387. X    buf = malloc(nb);
  1388. X    if (!buf)
  1389. X    {
  1390. X        fputs("No memory !\n", stderr);
  1391. X        exit(10);
  1392. X    }
  1393. X
  1394. X    buffull = FALSE;
  1395. X
  1396. X    while ((readsize = fread(buf, 1, nb, in)) == nb) buffull = TRUE;
  1397. X
  1398. X    if (buffull) if (!fwrite(buf + readsize, nb - readsize, 1, stdout)) return;
  1399. X     
  1400. X    fwrite(buf, readsize, 1, stdout);
  1401. X}
  1402. X
  1403. Xvoid linelast()
  1404. X{
  1405. X    typedef char LINEBUF[LINESIZE + 1];
  1406. X    LINEBUF *buf, *bufpos, *bufend, *scanbuf;
  1407. X    int buffull;
  1408. X
  1409. X#ifdef BUG
  1410. X    nb++;
  1411. X#endif
  1412. X
  1413. X    buf = (LINEBUF *)malloc(nb * (LINESIZE + 1));
  1414. X    if (!buf)
  1415. X    {
  1416. X        fputs("No memory !\n", stderr);
  1417. X        exit(10);
  1418. X    }
  1419. X
  1420. X    bufend = buf + nb;
  1421. X    bufpos = buf; buffull = FALSE;
  1422. X
  1423. X    while (fgets(*bufpos, LINESIZE, in))
  1424. X    {
  1425. X        bufpos++;
  1426. X        if (bufpos == bufend)
  1427. X        {
  1428. X            bufpos = buf;
  1429. X            buffull = TRUE;
  1430. X        }
  1431. X    }
  1432. X
  1433. X
  1434. X    if (buffull)
  1435. X       for (scanbuf = bufpos; scanbuf != bufend; scanbuf++)
  1436. X            if (fputs(*scanbuf, stdout) != 0) return;
  1437. X
  1438. X    for (scanbuf = buf; scanbuf != bufpos; scanbuf++)
  1439. X        if (fputs(*scanbuf, stdout) != 0) return;
  1440. X}
  1441. X
  1442. X/*
  1443. X +nb<l/c>
  1444. X -nb<l/c>
  1445. X -l/c
  1446. X*/
  1447. X
  1448. Xint analyse_opts(opt)
  1449. Xchar *opt;
  1450. X{
  1451. X    if (opt[0] != '+' && opt[0] != '-') return(FALSE);
  1452. X
  1453. X    if (opt[0] == '+')
  1454. X    {
  1455. X        int l;
  1456. X
  1457. X        l = stcd_l(++opt, &nb);
  1458. X        if (l == 0) return(FALSE);
  1459. X        opt += l;
  1460. X        keeplast = FALSE;
  1461. X    }
  1462. X    else
  1463. X        if (isdigit(*++opt)) opt += stcd_l(opt, &nb);
  1464. X
  1465. X    if (opt[0] == 'l') opt++;
  1466. X    else if (opt[0] == 'c') { charmode = TRUE; opt++; }
  1467. X
  1468. X    return(opt[0] == '\0');
  1469. X}
  1470. X
  1471. Xvoid main(argc, argv)
  1472. Xint argc;
  1473. Xchar **argv;
  1474. X{
  1475. X    int usage = TRUE;
  1476. X
  1477. X    if (argc == 1)
  1478. X    {
  1479. X        in = stdin;
  1480. X        usage = TRUE;
  1481. X    }
  1482. X    else if (argc == 2)
  1483. X    {
  1484. X        in = stdin;
  1485. X        usage = analyse_opts(argv[1]);
  1486. X    }
  1487. X    else if (argc == 3)
  1488. X    {
  1489. X        if (usage = analyse_opts(argv[1]))
  1490. X        {
  1491. X            in = fopen(argv[2], "r");
  1492. X            if (!in)
  1493. X            {
  1494. X                fputs("Couldn't open file\n", stderr);
  1495. X                exit(10);
  1496. X            }
  1497. X        }
  1498. X    }
  1499. X    else usage = FALSE;
  1500. X
  1501. X    if (!usage)
  1502. X        fputs("Usage: tail [+/-number][l/c] [file]\n", stderr);
  1503. X    else
  1504. X    {
  1505. X        if (charmode)
  1506. X            if (keeplast)
  1507. X                charlast();
  1508. X            else
  1509. X                charnofirst();
  1510. X        else
  1511. X            if (keeplast)
  1512. X                linelast();
  1513. X            else
  1514. X                linenofirst();
  1515. X    }
  1516. X}
  1517. X
  1518. SHAR_EOF
  1519. echo "extracting tail.doc.uu"
  1520. sed 's/^X//' << \SHAR_EOF > tail.doc.uu
  1521. X
  1522. Xbegin 644 tail.doc
  1523. XM"B`@("`@5$%)3"@Q*2`@("`@("`@("`@("`@("`@("`@("!5<V5R(&UA;G5AG
  1524. XM;"`@("`@("`@("`@("`@("`@("`@("`@5$%)3"@Q*0H*"@H@("`@()LQ;4Y!(
  1525. XM344*("`@("`@("`@()LP;71A:6P@+2!E>'1R86-T(&5N9"!O9B!F:6QE"@H@F
  1526. XM("`@()LQ;5-93D]04TE3"B`@("`@("`@("!T86EL()LP;5L@*R\M(%L@;G5MZ
  1527. XM8F5R(%T@FS%M;&,@FS!M72!;(&9I;&4@70H*("`@("";,6U$15-#4DE05$E/N
  1528. XM3@H@("`@("`@("`@FS!MFS1M=&%I;)LP;2`@8V]P:65S("!P87)T("!O9B`@]
  1529. XMFS1M9FEL99LP;2`@*&]R("!S=&%N9&%R9"`@:6YP=70@(&EF("!N;VYE"B`@G
  1530. XM("`@("`@("!S<&5C:69I960I('1O('-T86YD87)D(&]U='!U="X*"B`@("`@\
  1531. XM("`@("!4:&4@9FER<W0@;W!T:6]N('-P96-I9FEE<R!W:&5R92!T;R!S=&%RU
  1532. XM="!C;W!Y:6YG+"!E:71H97(@870*("`@("`@("`@(&QI;F4@*&]R(&-H87)A)
  1533. XM8W1E<BD@;B`H;W!T:6]N(&ES("N;-&UNFS!M*2!O<B!N(&QI;F5S("AC:&%R(
  1534. XM86-T97)S*0H@("`@("`@("`@8F5F;W)E('1H92!E;F0@*&]P=&EO;B!I<R`M*
  1535. XMFS1M;ILP;2DN("";-&ULFS!M('-P96-I9FEE<R`@=&AA="`@=6YI=',@(&]FM
  1536. XM"B`@("`@("`@("!L:6YE<R!A<F4@=7-E9"P@FS1M8YLP;2!M96%N<R!C:&%RC
  1537. XM86-T97)S+@H*("`@("";,6U%6$%-4$Q%4PH*("`@("`@("`@("`@("`@FS!MH
  1538. XM=&%I;"`M,VP@9VQU<',*"B`@("`@("`@("!O=71P=71S('1H92!L87-T(#,@!
  1539. XM;&EN97,@;V8@9FEL92";-&UG;'5P<YLP;2X*"B`@("`@("`@("`@("`@(&QI&
  1540. XM<W0@?"!T86EL("LR-6,*"B`@("`@("`@("!P<FEN=',@(&%L;"!B=70@=&AE;
  1541. XM(&9I<G-T(#(T("AO=71P=70@FS%M<W1A<G1S()LP;6%T(&-H87)A8W1E<B`R-
  1542. XM-2D*("`@("`@("`@(&-H87)A8W1E<G,@(&]F("!T:&4@(&]U='!U="`@;V8@$
  1543. XM()LT;6QI<W2;,&T@("AW:71H("!A;B`@87!R;W!R:6%T90H@("`@("`@("`@$
  1544. XM<VAE;&PI+@H*("`@("";,6U"54=3"B`@("`@("`@("";,&U486EL<R`@<F5L/
  1545. XM871I=F4@('1O("!T:&4@(&5N9"`@;V8@('1H92`@9FEL92!A<F4@<W1O<F5DS
  1546. XM(&EN(&$*("`@("`@("`@(&)U9F9E<BP@=VAI8V@@:7,@86QL;V-A=&5D(&%T5
  1547. XM(')U;BUT:6UE+"!A;F0@=&AU<R!A<F4@;&EM:71E9`H@("`@("`@("`@:6X@5
  1548. XM;&5N9W1H+@H*("`@("`@("`@($QI;F5S(&QO;F=E<B!T:&%N(#(U-2!C:&%RK
  1549. XM86-T97)S('=I;&P@8F4@<W!L:70N"@H@("`@("`@("`@5VAE;B!O;FQY(&]N`
  1550. XM92!A<F=U;65N="!I<R!S<&5C:69I960L(&ET(&ES(&%S<W5M960@=&\@8F4@Q
  1551. XM=&AE"B`@("`@("`@("!O<'1I;VYS+@H*"B`@("`@("`@("`@("`@("`@("`@C
  1552. X7("`@("`@("`@("`@("`@("`@+3$M"@H*I
  1553. X``
  1554. Xend
  1555. Xsize 1328
  1556. SHAR_EOF
  1557. echo "extracting tail.uu"
  1558. sed 's/^X//' << \SHAR_EOF > tail.uu
  1559. X
  1560. Xbegin 644 tail
  1561. XM```#\P`````````#``````````(```;]`````````2X```/I```&_21()`!)U
  1562. XM^0````!'^0```DAR`"`\````G&`")L%1R/_\+'@`!"E.`H`I3P*(0JP"A"9NU
  1563. XM`11P`"(\```P`$ZN_LXI:P"8`GQ*JP"L9P``<"`/D*\`!`:`````@"E``DQA-
  1564. XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)`I#0@5*`0F=2@`)`__Z?P%6`^
  1565. XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z
  1566. XM``!X*6L`.@),<']2@-&L`DQA``#"0>L`7$ZN_H!!ZP!<3J[^C"E``H0O`"1`5
  1567. XM("H`)&<2+&P$J"!`(B@``"E!`GQ.KO^"(BH`(&<:)#P```/M3J[_XBE``HQGR
  1568. XM"N6(($`G:``(`*0@;`*$+PA(;`)((&@`)"EH``0"D$ZZ!!1.N@1\<`!@!"`OW
  1569. XM``0O`"`L`G1G!"!`3I!.NAH$+'@`!")L!*A.KOYB3KH#ZDJL`H1G&B(L`HQGW
  1570. XM!$ZN_]PL>``$3J[_?")L`H1.KOZ&(!\N;`*(3G5P9&"T0_H`$'``3J[]V"E`3
  1571. XM!*AG[$YU9&]S+FQI8G)A<GD`+P=3K```;RX@;`*44Z@`"&T6(&P"E"!H``0BU
  1572. XM;`*44JD`!'``$!!@"B\L`I1.N@CJ6$]2@&;,(&P"E%.H``AM%B!L`I0@:``$G
  1573. XM(FP"E%*I``1P`!`08`HO+`*43KH(O%A/+@!2@&<P4ZP`KFT2(&P`IE*L`*8@Z
  1574. XM!Q"`<@`2`&`4(`=R`!(`2&P`HB\!3KH%\%!/(@!2@6:@+A].=4Y5_OY3K```%
  1575. XM;Q@O+`*42'@!`$AM_O].NA(>3^\`#$J`9N(O+`*42'@!`$AM_O].NA(&3^\`!
  1576. XM#$J`9Q)(;`"B2&W^_TZZ#Z)03TJ`9]9.74YU2.<#$"\L``!.N@T\6$\F0"`+*
  1577. XM9AA(;`#$2&P`#$ZZ#WA(>``*3KH2@$_O``Q^`&`"?@$O+`*4+RP``$AX``$O.
  1578. XM"TZZ#N1/[P`0+`"\K```9^!*AV<B($O1QB`L``"0ADAL`*)(>``!+P`O"$ZZQ
  1579. XM#DI/[P`02H!G%$AL`*)(>``!+P8O"TZZ#C)/[P`03-\(P$YU3E7_^$CG`3!2)
  1580. XMK```("P``"(\```!`4ZZ%)HO`$ZZ#)A83R9`($LO2``0(`MF&$AL`,1(;``:7
  1581. XM3KH.SDAX``I.NA'63^\`#"`L```B/````0%.NA1@($O7P")+)$A^`"])``Q@,
  1582. XM#M3\`0&URV8&)&\`$'X!+RP"E$AX`0`O"DZZ$-A/[P`,2H!FW$J'9QXF2F`49
  1583. XM2&P`HB\+3KH.;E!/2H!F*-;\`0&W[P`,9N8F;P`08!1(;`"B+PM.N@Y.4$]*3
  1584. XM@&8(UOP!`;?*9NA,WPR`3EU.=4Y5__A(YR$0)FT`"!`3<BNP`6<*="VP`F<$K
  1585. XM<`!@:!`;L`%F'DAL```O"TZZ"()03RX`2H=F!'``8$S7QT*L``A@(!`32(!(#
  1586. XMP$'L`4$(,``""`!G#DAL```O"TZZ"%)03]?`$!-R;+`!9@12BV`.<F.P`68('
  1587. XM<@$I00`$4HM*$U?`1`!(@$C`3-\(A$Y=3G5(YP$0+B\`#"9O`!!P`;Z`9@Q!;
  1588. XM[`"`*4@"E"X`8&)P`KZ`9A9![`"`*4@"E"\K``1A`/]`6$\N`&!&<`.^@&8^1
  1589. XM+RL`!&$`_RQ83RX`2H=G,$AL`"@O*P`(3KH-VE!/*4`"E&8<2&P`Q$AL`"I.8
  1590. XMN@TZ2'@`"DZZ$$)/[P`,8`)^`$J'9A!(;`#$2&P`/DZZ#1I03V`H2JP`!&<2)
  1591. XM2JP`"&<&80#]<&`680#\@&`02JP`"&<&80#][F`$80#]"$S?"(!.=0``3G5.$
  1592. XM=4CG!S`N+P`8)F\`'"PO`"`O!TZZ%-Q83R1`(`IF!'#_8#8(*@`#``-G$$AX]
  1593. XM``)"IR\'3KH*K$_O``PO!B\++RH`!$ZZ$`!/[P`,*@!*K`)@9P1P_V`"(`5,&
  1594. XMWPS@3G4``````````'!A3E7_\$CG(3(F;P`L#*P````@!!)L``"&$!-R(+`!Z
  1595. XM9PQR";`!9P9R"K`!9@12BV#H2A-G:"`L!!+E@%*L!!)![`0:T<`D2'`BL!-F2
  1596. XM)E*+)(M*$V<*<"*P$V<$4HM@\DH39@Q(>``!3KH4Y%A/8)Y"&V":)(M*$V<8&
  1597. XM$!-R(+`!9Q!R";`!9PIR"K`!9P12BV#D2A-F`F`&0AM@`/]R2JP$$F8&(&P"2
  1598. XMA&`$0>P$&BE(!!9*K`029GQ!^@$D0^P#V"+8(M@BV"+8,I`B;`*$(&D`)$AX!
  1599. XM`"@O*``$2&P#V$ZZ!;I/[P`,0>P#V"(()#P```/N+&P$J$ZN_^(I0`*<*4`"Y
  1600. XMI'($*4$"H"E``JPI00*HY8"3R2QX``0K0/_P3J[^VB!M__`B0"-H``@`I'X`[
  1601. XM*T#_]&`J+&P$J$ZN_\HI0`*<3J[_Q"E``J1!^@"F(@@D/````^U.KO_B*4`"I
  1602. XMK'X$(`<`0(`!@:P"F"`'`$"``H&L`J``K```@`,"J$JL`.AG!'``8`8@/```I
  1603. XM@``N`$*L`)P@!P!```$I0`"8<`$I0`"^(`<`0``"*4``NG`"*4``X"`'`$``G
  1604. XM@"E``-Q!^A%.*4@">"\L!!8O+`023KK]!D*73KH-N$SM3(3_W$Y=3G5C;VXZM
  1605. XM,3`O,3`O,S(P+S@P+P`J````````````````````````````````````````E
  1606. XM`````````"\+)F\`"$JK`!1G#`@K``,`&V8$<`!@-B\L`D1.N@E26$\G0``$J
  1607. XM)T``$$J`9@IP#"E`!*1P_V`6)VP"1``4<//!JP`8<``G0``,)T``""9?3G4`1
  1608. XM`````````````````$Y5_^Q(YR\0+B\`-"9O`#@H!W`QP*L`&&<&</]@``)P;
  1609. XM""L`!P`:5L!$`$B`2,`L`$JK`!1F``"$""L``@`;9GIP`"=```QR_[Z!9P`")
  1610. XM0B\+3KK_3EA/2H!G#`CK``4`&W#_8``"*@CK``$`&TH&9PX@*P`4(@!$@2=!%
  1611. XM``Q@""`K`!0G0``,4ZL`#&T6(&L`!$/H``$G20`$(`<0@'(`$@!@$B`'<@`2:
  1612. XM`"\++P%A`/]24$\B`"`!8``!U@@K``(`&V=8</^^@&8&<`!@``'"(`<;0/__P
  1613. XM2@9G(G(*OH%F''("+P%(>@&R+RL`'"M!__!.NOPT3^\`#"H`8!IR`2\!2&W_]
  1614. XM_R\K`!PK0?_P3KK\&$_O``PJ`'[_8```X`CK``$`&TH&9U)P_[Z`9TQ4JP`,@
  1615. XM<@J^@68F(&L`!$/H``$G20`$$+P`#2(K``Q*@6L*+PLO`&$`_JY03U*K``P@F
  1616. XM:P`$0^@``2=)``0@!Q"`(BL`#$J!:P`!''[_("L`!)"K`!`K0/_P9W((*P`&U
  1617. XM`!IG4DAX``)"IR\K`!Q.N@9L3^\`#"M`_^Q*!F<X4ZW_[&TR0J<O+?_L+RL`1
  1618. XM'$ZZ!DQ(>``!2&W__2\K`!Q.N@043^\`&$JL`F!F"A`M__UR&K`!9\@O+?_P,
  1619. XM+RL`$"\K`!Q.NOLX3^\`#"H`8`)Z`'#_NH!F"`CK``4`&V`,NJW_\&<&".L`W
  1620. XM!``;2@9G#B(K`!0D`42")T(`#&`8""L``@`;9PAR`"=!``Q@""(K`!0G00`,_
  1621. XM(&L`$"=(``2^@&<N4ZL`#&T6(&L`!$/H``$G20`$(`<0@'(`$@!@$B`'<@`2U
  1622. XM`"\++P%A`/V04$\B`'`PP*L`&&<$</]@#'#_N(!F!'``8`(@!$S?"/1.74YU>
  1623. XM#0H`````2.<'$"9O`!0(*P`'`!I6P$0`2(!(P"X`<##`JP`89PI"JP`(</]@*
  1624. XM``%8""L`!P`;9Q0(*P`&`!MG#"\+2'C__TZZ_2)03TJK`!1F-D*K``@(*P`"]
  1625. XM`!MG$G`!)T``%$'K`"`G2``08```A"\+3KK\EEA/2H!G=@CK``4`&W#_8``!T
  1626. XM`$H'9V94JP`(("L`"$J`;EH@:P`$0^@``2=)``1\`!P0(`8,@````!IG+@R`.
  1627. XM````#68R4ZL`"&T4(&L`!$/H``$G20`$<``0$&```+0O"V$`_RY83V```*@(^
  1628. XMZP`$`!MP_V```)P@!F```)8(*P`!`!MF3@CK````&R\K`!0O*P`0+RL`'$ZZX
  1629. XM`CA/[P`,*@!*A6H&".L`!0`;2H5F!@CK``0`&TJ%;QI*!V<*(`5$@"=```A@?
  1630. XM!"=%``@@:P`0)T@`!'`RP*L`&&<62@=G"'#_)T``"&`&<``G0``(</]@(%.KX
  1631. XM``AM$B!K``1#Z``!)TD`!'``$!!@""\+80#^A%A/3-\(X$YU``!.5?_X2.<#4
  1632. XM,"9O`"`D;P`D+B\`*"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@"")+T\`K2?_XR
  1633. XMO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU(&\`!")(<@!PU
  1634. XM`"\"#!``*V<&#!``+68"4D@0&`0``#!M$@P```EN#"0!Y8'2@M*!TH!@Y@P1!
  1635. XM`"UF`D2!)!\@"%.`(&\`"""!D(E.=4Y5_^A(YP$R+B\`-$J';@9P_V```-)P_
  1636. XM"+Z`9`(N`"`'5H`N``)'__PD;0`((&T`"-''WZP`>$/L`'0F42M(__`K2?_TU
  1637. XM(`MG``"0($L@*P`$T<`K2/_L(FW_\+?)8Q`DBR5'``0L;?_T+(IP`&!XM\EF+
  1638. XM&BQ3)(X@*P`$(@#2AR5!``0L;?_T+(IP`&!:M<AD")^L`'AP_V!.M<AF+$J3@
  1639. XM9PX@4[/(8PB?K`!X</]@.-^K``1*DV<.L]-F"B`I``31JP`$)I%P`&`>*TO_5
  1640. XM]"MM_^S_Z"938`#_;B!M__0@BD*2)4<`!'``3-],@$Y=3G4``````````'!AX
  1641. XM2.<!$"9O``PN+P`0+P<O"TZZ_O903TS?"(!.=4CG!S`N+P`8)F\`'"PO`"`O%
  1642. XM!TZZ#"183R1`(`IF!'#_8!XO!B\++RH`!$ZZ""A/[P`,*@!*K`)@9P1P_V`"7
  1643. XM(`5,WPS@3G4``$Y5_^9(YP\P)F\`.BXO`#Y"+?__0JP"8"ML!*3_\GH#NJP`O
  1644. XM9&P2(`7G@$'L`IA*L`@`9P12A6#H("P`9+"%9@QP&"E`!*1P_V```2H@!>>`W
  1645. XM0>P"F-'`)$A*K0`09P@(+0`"`!-G"BM\```#[/_N8`@K?````^[_[B`\``"`!
  1646. XM`,"L`'RQAP@'``-G#"`'`D#__"X``$<``B`'<@/`@0R``````F<,#(`````!K
  1647. XM9P1*@&8&+`=2AF`,<!8I0`2D</]@``"T(`<"@````P!G``"("`<`"F<6&WP`Z
  1648. XM`?__+RW_[B\+3KH'OE!/*`!@/`@'``EF%DAX`^TO"TZZ!V!03R@`2H1J!`C'Q
  1649. XM``D(!P`)9QH;?``!__\I;?_R!*0O+?_N+PM.N@?D4$\H`$HM__]G-B`'<GC29
  1650. XM@<"!2H!G*DJ$:R8O!$ZZ""Q(>`/M+PM.N@<.3^\`#"@`8`Y(>`/M+PM.N@;\&
  1651. XM4$\H`$JL`F!G!'#_8`@DAB5$``0@!4S?#/!.74YU````````````````````R
  1652. XM````<&%(YP$P+B\`$$JL!)QG%B1L!)PO$B\L!)Q.NOWR4$^1R"E(!)Q*AV8$8
  1653. XM<`!@'EB'+P=.N@$J6$\F0$J`9@1P`&`*)$LDAT'K``0@"$S?#(!.=4CG#Q`NY
  1654. XM+P`8+"\`'"HO`"`O!TZZ"?Q83R9`(`MF!'#_8!XO!2\&+RL`!$ZZ!81/[P`,K
  1655. XM*`!*K`)@9P1P_V`"(`1,WPCP3G4``$CG`S`N+P`42H=N!G``8```I'`(OH!DL
  1656. XM`BX`(`=6@"X``D?__$7L`'0F4B`+9T`@*P`$L(=M,K"'9@P@4R2(GZP`>"`+I
  1657. XM8&X@*P`$D(=R"+"!918@2]'')(@D2"23)4``!)^L`'@@"V!,)$LF4V"\(`<B\
  1658. XM+`#LT(%3@$ZZ!PHB+`#L3KH&XBP`4(8@!E:`+``"1O_\+P9.N@IZ6$\F0"`+E
  1659. XM9Q(O!B\+3KK[UBZ'80#_5%!/8`)P`$S?#,!.=0``````````<&$O!RXO``@OP
  1660. XM!TZZ_S)83RX?3G4``$Y5__1(YP\P)F\`+"XO`#0D;P`X?`"\AVQ**BT`#$J%_
  1661. XM;SYX`!@;4ZH`#&T6(&H`!$/H``$E20`$(`00@'(`$@!@$B`$<@`2`"\*+P%.9
  1662. XMNO:.4$\B`%*!9@0@!F`*4X5@OE*&8+(@!DS?#/!.74YU``!.5?_T2.</,"9O`
  1663. XM`"PN+P`T)&\`.$JM``QF!'``8$A\`+R';$`J+0`,2H5O-%.J``AM$B!J``1#B
  1664. XMZ``!)4D`!'``$!!@""\*3KKXP%A/*`!P_[B`9@0@!F`.(`06P%.%8,A2AF"\N
  1665. XM(`9,WPSP3EU.=0``2.<!,"9O`!`D;P`4?@`>&TJ'9Q(O"B\'3KH`%E!/4H!F,
  1666. XMZG#_8`)P`$S?#(!.=0``2.<!$"XO``PF;P`0""L`!@`;9Q)P"KZ`9@PO"R\':
  1667. XM3KKUK%!/8#!3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`2(`=R`!(`+PLO5
  1668. XM`4ZZ]7Y03R(`(`%,WPB`3G5.5?_X2.<`,$?L`(`@"V<,2JL`&&<&)$LF4V#P0
  1669. XM(`MF(DAX`").NOY:6$\F0$J`9@1P`&`<)(MP(7(`($L0P5'(__PO"R\M``POU
  1670. XM+0`(3KH`#DSM#`#_\$Y=3G4``$Y5__!(YP\P)F\`-"1O`#A*J@`89P@O"DZZ]
  1671. XM`;)83RHL`.A^`7``$#-X``Q``&)G"@Q``&%F#'H`8`8J/```@`!2AW(KLC-X9
  1672. XM`%?`1`!(@$C`*`!P`!`3#$``=V<``(@,0`!R9T(,0`!A9@``ODAX``PO/```'
  1673. XM@0(O+0`(3KKZO$_O``PL`'#_O(!F!G``8```T$J$9P9P0-"`8`)P`BX``$=`6
  1674. XM`&```(A*A&<$<`)@`G```$"``$AX``PO`"\M``A.NOIX3^\`#"P`</^\@&8&+
  1675. XM<`!@``",2H1G!G!`T(!@`G`!+@!@2$J$9P1P`F`"<`$`0(```$`!``!``@!()
  1676. XM>``,+P`O+0`(3KKZ,D_O``PL`'#_O(!F!'``8$9*A&<&<$#0@&`"<`(N`&`$-
  1677. XM<`!@,I'()4@`$'``)4``%"5&`!PE:@`0``0E0``,)4``"$J%9@8@/```@``B"
  1678. XM!X*`)4$`&"`*3-\,\$Y=3G4``$CG#S`F;P`<+B\`("1O`"0H"U.'+`=*AFLT(
  1679. XM4ZH`"&T2(&H`!$/H``$E20`$<``0$&`(+PI.NO826$\J`'#_NH!G#%.&(`46R
  1680. XMP'(*NH%FR$(3O(=F!'``8`0@1"`(3-\,\$YU``!(YP,P)F\`%`@K``$`&V<0"
  1681. XM+PM(>/__3KKS,%!/+@!@`GX`("L`&$*`9Q1*JP`49PXO*P`4+RL`$$ZZ^,Y0D
  1682. XM3R\K`!Q.N@306$\L`'#_OH!G!DJ&9@)P`$S?#,!.=4CG`Q`N+P`01^P`@"`+]
  1683. XM9S0(*P`"`!MF*`@K``$`&V<@("L`!)"K`!`L`$J&9Q(O!B\K`!`O*P`<3KKOJ
  1684. XMUD_O``PF4V#(+P=.N@5\6$],WPC`3G4``$CG-Q`N+P`<)F\`("PO`"1*K`)XP
  1685. XM9P1.N@340JP"8"(')`LF!BQL!*A.KO_0*@!P_[J`9@Y.KO]\*4`"8'`%*4`$9
  1686. XMI"`%3-\([$YU``!(YS\`+B\`'"PO`"`J+P`D2JP">&<$3KH$B$*L`F`@!5.`!
  1687. XM(@<D!B8`+&P$J$ZN_[XH`'#_N(!F#DZN_WPI0`)@<!8I0`2D(`4,@`````)GL
  1688. XM%@R``````6<(2H!F&"`&8!0@!-"&8`XB!W0`=@`L;`2H3J[_ODS?`/Q.=0``6
  1689. XM2.<W$"XO`!PF;P`@+"\`)$JL`GAG!$ZZ!`Q"K`)@(@<D"R8&+&P$J$ZN_]8JI
  1690. XM`'#_NH!F#DZN_WPI0`)@<`4I0`2D(`5,WPCL3G4``$CG(Q`F;P`4+B\`&$JLB
  1691. XM`GAG!$ZZ`\1"K`)@(@LD!RQL!*A.KO_B+`!*AF823J[_?"E``F!P`BE`!*1PF
  1692. XM_V`"(`9,WPC$3G4``$Y5__Q(YR$0)F\`&$JL`GAG!$ZZ`WQ"K`)@(@MT_BQL5
  1693. XM!*A.KO^L+@!*AV<*(@=.KO^F</]@)B(+)#P```/N3J[_XBX`2H=F$DZN_WPIT
  1694. XM0`)@<`(I0`2D</]@`B`'3-\(A$Y=3G5.5?_\2.<A$"9O`!A*K`)X9P1.N@,8K
  1695. XM0JP"8"(+=/XL;`2H3J[_K"X`2H=G#"('3J[_IB(+3J[_N"(+)#P```/N3J[_O
  1696. XMXBX`2H=F$DZN_WPI0`)@<`(I0`2D</]@`B`'3-\(A$Y=3G4``"\'+B\`"$JL,
  1697. XM`GAG!$ZZ`K8B!RQL!*A.KO_<<``N'TYU2.<P`"0`)@%(0DA#Q,'&P,#!U$-(3
  1698. XM0D)"T(),WP`,3G5*@&H``!Y$@$J!:@``#$2!80``($2!3G5A```81(!$@4YU\
  1699. XM2H%J```,1(%A```&1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"2$`T:
  1700. XM`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&944,,00@`9```!NF964,,02``"
  1701. XM9```!N6954-*06L```;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!D()D=
  1702. XM```(4T/0@63^<@`R`TA#Y[A(0,%!)A\D'TYU3E7_GDCG,S)^`"!L`I`>*/__K
  1703. XM<$^^@&\"+@`@!T/M_Z]@`A+84X!D^D(U>*^3R2QX``1.KO[:)D!*JP"L9TP@N
  1704. XM*P"LY8`D0"PJ`#A*AF8$+"L`H$J&9S0B!D'Z`+(D"'8++&P$J$ZN_]`@1U*';
  1705. XM(`@;O``*"*\B!D'M_Z\D""8'+&P$J$ZN_]!P_V!.2JP$H&820_H`AG``+'@`R
  1706. XM!$ZN_=@I0`2@0>W_KRE(`1!(>``\2'@`^G``+P`O`$AL`2Q(;`$82&P!!$*G4
  1707. XM3KH!2$_O`"!3@&<$</]@`G``3-],S$Y=3G4J*B!5<V5R($%B;W)T(%)E<75EL
  1708. XM<W1E9"`J*@``0T].5$E.544``$%"3U)4`"HJ*B!"<F5A:SH@`&EN='5I=&EO3
  1709. XM;BYL:6)R87)Y````````````````````2.<!$"XO``PO!TZZ`#Q83R9`(`MF2
  1710. XM!'#_8"@(*P`"``-G!G``)H!@&B\K``1.NOV66$]P`":`2JP"8&<$</]@`G``J
  1711. XM3-\(@$YU+P<N+P`(<``I0`)@2H=K(KZL`&1L'"`'YX!![`*82K`(`&<.(`?G:
  1712. XM@$'L`IC1P"`(8`AP"2E`!*1P`"X?3G4``$CG`0)P`"(\```P`"QX``1.KO[.2
  1713. XM+@`"AP``,`!*AV8$<`!@($JL`GAG&"!L`GA.D$J`9@1P`&`,2'@`%$ZZ`$98O
  1714. XM3R`'3-]`@$YU8;1.=0``2.<P,BQL!*`@;P`8(F\`'"1O`"`F;P`D("\`*"(O1
  1715. XM`"PD+P`P)B\`-$ZN_J1,WTP,3G4``$CG!P`N+P`0("P`9%.`+`!*1FLP(`9('
  1716. XMP.>`0>P"F"HP"`!*!6<:"`4``F84(`9(P.>`0>P"F"\P"`1.NOQ\6$]31F#,<
  1717. XM+P=.NN7V6$],WP#@3G4``$CG`#(F;`2L(`MG%"13(DL@*P`(+'@`!$ZN_RXF%
  1718. XM2F#HD<@I2`2P*4@$K$S?3`!.=4CG`3(N+P`4<`S>@"`'<@`L>``$3J[_.B9`T
  1719. XM(`MF!'``8#HG1P`(1>P$K"!J``0G2``$D<@FB$J29@(DBTJJ``1G!B)J``0B(
  1720. XMBR5+``1*K`!H9@0I2P!H0>L`#"`(3-],@$YU``````````````````````/LL
  1721. XM`````@````(````,````!@````````/R```#Z0````````/R```#Z@```)(`K
  1722. XM```*``````````%.;R!M96UO<GD@(0H``$YO(&UE;6]R>2`A"@``<@!#;W5L2
  1723. XM9&XG="!O<&5N(&9I;&4*`%5S86=E.B!T86EL(%LK+RUN=6UB97)=6VPO8UT@`
  1724. XM6V9I;&5="@``````*`````````````````````````````"``````*(`````L
  1725. XM``````````````````````````````````````#$````````````````````$
  1726. XM`````````````````````````````````````````````````````````````
  1727. XM``````````"`````!`#__P````X`#@```````!F<`````/__````!``$````9
  1728. XM``````````#P__\````$``0````````9N`````#__P````0`!````````!G"H
  1729. XM```````@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0@
  1730. XM$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!L
  1731. XM`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0("`@Z
  1732. XM("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0$!`0$!`00
  1733. XM$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!`0$!`0$02
  1734. XM$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@```````"````F
  1735. XM`^P````#`````````3@```$D````_`````,````"```!%````*(```"`````(
  1736. X%`````_(#X
  1737. X``
  1738. Xend
  1739. Xsize 7880
  1740. SHAR_EOF
  1741. echo "extracting tee.c"
  1742. sed 's/^X//' << \SHAR_EOF > tee.c
  1743. X/*
  1744. Xtee file1 file2 ...
  1745. X
  1746. Xcopies standard input to standard output and file1, file2, ...
  1747. X*/
  1748. X
  1749. X#include <stdio.h>
  1750. X#include <stdlib.h>
  1751. X#include <string.h>
  1752. X#include <error.h>
  1753. X#include <ios1.h>
  1754. X#include <proto/dos.h>
  1755. X
  1756. X#define STR(x) # x
  1757. X
  1758. X#define TRUE 1
  1759. X#define FALSE 0
  1760. X
  1761. X#define WARN 10
  1762. X#define ERROR 20
  1763. X
  1764. X#define MAXLEN 256 /* Max line length */
  1765. X#define MAXF 10
  1766. X
  1767. Xextern int _bufsiz;
  1768. Xint err;
  1769. X
  1770. Xvoid main(int argc, char **argv)
  1771. X{
  1772. X    FILE *files[MAXF];
  1773. X    int i, f, nb;
  1774. X    char line[MAXLEN + 1], *mode;
  1775. X
  1776. X    /* Setup stdout */
  1777. X    if (IsInteractive(chkufb(fileno(stdout))->ufbfh))
  1778. X        setvbuf(stdout, NULL, _IOLBF, _bufsiz);
  1779. X
  1780. X    if (argc >= 2 && strcmp(argv[1], "-a") == 0)
  1781. X    {
  1782. X        argc--;
  1783. X        argv++;
  1784. X        mode = "a";
  1785. X    }
  1786. X    else
  1787. X        mode = "w";
  1788. X
  1789. X    if (argc > MAXF)
  1790. X    {
  1791. X        fputs("No more than " STR(MAXF) " files\n", stderr);
  1792. X        nb = MAXF;
  1793. X    }
  1794. X    else
  1795. X        nb = argc;
  1796. X
  1797. X    for (i = 1, f = 0; i < nb; i++)
  1798. X    {
  1799. X        files[f] = fopen(argv[i], mode);
  1800. X
  1801. X        if (!files[f])
  1802. X        {
  1803. X            char buf[81];
  1804. X
  1805. X            buf[80] = '\0';
  1806. X            strcpy(buf, "Error opening ");
  1807. X            strncat(buf, argv[i], 80 - strlen(buf));
  1808. X            perror(buf);
  1809. X            fflush(stderr);
  1810. X            err = WARN;
  1811. X        }
  1812. X        else
  1813. X            f++;
  1814. X    }
  1815. X
  1816. X    line[MAXLEN] = '\0';
  1817. X    while (fgets(line, MAXLEN, stdin) && err < ERROR)
  1818. X    {
  1819. X        fputs(line, stdout);
  1820. X        for (i = 0; i < f && err < ERROR; i++)
  1821. X        {
  1822. X            fputs(line, files[i]);
  1823. X            if (errno != 0) err = ERROR;
  1824. X        }
  1825. X    }
  1826. X    fflush(stdout);
  1827. X
  1828. X    for (i = 0; i < f && err < ERROR; i++)
  1829. X    {
  1830. X        fclose(files[i]);
  1831. X        if (errno != 0) err = ERROR;
  1832. X    }
  1833. X    if (err >= ERROR) perror("tee failed");
  1834. X    /* Any files left open will be closed */
  1835. X    exit(err);
  1836. X}
  1837. X
  1838. SHAR_EOF
  1839. echo "extracting tee.doc.uu"
  1840. sed 's/^X//' << \SHAR_EOF > tee.doc.uu
  1841. X
  1842. Xbegin 644 tee.doc
  1843. XM"B`@("`@5$5%*#$I("`@("`@("`@("`@("`@("`@("`@("!5<V5R(&UA;G5A[
  1844. XM;"`@("`@("`@("`@("`@("`@("`@("`@(%1%12@Q*0H*"@H@("`@()LQ;4Y!<
  1845. XM344*("`@("`@("`@()LP;71E92`M('!I<&4@9FET=&EN9PH*("`@("";,6U3"
  1846. XM64Y/4%-)4PH@("`@("`@("`@=&5E()LP;5L@+9LQ;6$@FS!M72!;(&9I;&5SZ
  1847. XM(%T*"B`@("`@FS%M1$530U))4%1)3TX*("`@("`@("`@()LP;9LT;71E99LPU
  1848. XM;2`@8V]P:65S("!S=&%N9&%R9"`@:6YP=70@=&\@<W1A;F1A<F0@;W5T<'5TV
  1849. XM('=H:6QE(&UA:VEN9PH@("`@("`@("`@8V]P:65S(&]F(&ET(&EN()LT;69IQ
  1850. XM;&5SFS!M+@H*("`@("`@("`@("V;,6UAH)LP;:"@(&-A=7-E<R!T:&4@8V]P$
  1851. XM:65S("!T;R`@8F4@(&%P<&5N9&5D("!T;RP@(')A=&AE<B`@=&AA;@H@("`@V
  1852. XM("`@("`@("`@("!R97!L86-I;F<L()LT;69I;&5SFS!M+@H*("`@("";,6U"%
  1853. XM54=3"B`@("`@("`@("";,&U-;W-T("!U<V5F=6P@(&EF("!Y;W4@(&AA=F4@8
  1854. XM82!S:&5L;"!T:&%T('-U<'!O<G1S('!I<&EN9R`H96<*("`@("`@("`@(%=3)
  1855. XM:&5L;"P@05-H96QL*2X*"@H@("`@("`@("`@("`@("`@("`@("`@("`@("`@?
  1856. X/("`@("`@("`@("TQ+0H*?
  1857. X``
  1858. Xend
  1859. Xsize 600
  1860. SHAR_EOF
  1861. echo "extracting tee.uu"
  1862. sed 's/^X//' << \SHAR_EOF > tee.uu
  1863. X
  1864. Xbegin 644 tee
  1865. XM```#\P`````````#``````````(```<R`````````0<```/I```',B1()`!)Z
  1866. XM^0````!'^0```;!R`"`\````FV`")L%1R/_\+'@`!"E.`>@I3P'P0JP!["9N0
  1867. XM`11P`"(\```P`$ZN_LXI:P"8`>1*JP"L9P``<"`/D*\`!`:`````@"E``;1A;
  1868. XM``$N(&L`K-'(T<@B:``0T\G3R2`"<@`2&2E)`?C0@5*`0F=2@`)`__Z?P%6`E
  1869. XM0G<(`"`"4X#4@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@Z
  1870. XM``!X*6L`.@&T<']2@-&L`;1A``#"0>L`7$ZN_H!!ZP!<3J[^C"E``>PO`"1`*
  1871. XM("H`)&<2+&P$#"!`(B@``"E!`>1.KO^"(BH`(&<:)#P```/M3J[_XBE``?1GD
  1872. XM"N6(($`G:``(`*0@;`'L+PA(;`&P(&@`)"EH``0!^$ZZ`D1.N@*L<`!@!"`O(
  1873. XM``0O`"`L`=QG!"!`3I!.NAK8+'@`!")L!`Q.KOYB3KH"&DJL`>QG&B(L`?1G3
  1874. XM!$ZN_]PL>``$3J[_?")L`>Q.KOZ&(!\N;`'P3G5P9&"T0_H`$'``3J[]V"E`A
  1875. XM!`QG[$YU9&]S+FQI8G)A<GD`3E7^=$CG!S(N+P&L)F\!L"\L`)I.NAE.6$\@'
  1876. XM0"(H``0L;`0,3J[_*$J`9Q8O+`&L2'@`0$*G2&P`?DZZ"[1/[P`0<`*^@&T>3
  1877. XM(&L`!$/L```0&+`99A!*`&;V9@I3AUB+1>P`!&`$1>P`!BM*_L9P"KZ`;Q)("
  1878. XM;`"@2&P`"$ZZ$-903WP*8`(L!WH!?@!%[?_,6(M@:"\M_L8O$TZZ$4103R2`3
  1879. XM2H!F3D(M_L5![``B0^W^=1+89OQ![?YU(DA*&6;\4XF3R"`)<E"2@"\!+Q,O3
  1880. XM"$ZZ"L9(;?YU3KH-2DAL`*!(>/__3KH#QD_O`!AP"BE``?Q@!%*'6(I2A5B+9
  1881. XMNH9ME$(M_\M@0$AL`'Y(;?[+3KH01%!/?`!'[?_,8!PO$TAM_LM.NA`P4$]*M
  1882. XMK`0(9P9P%"E``?Q2AEB+O(=L"@RL````%`'\;=9(;`!<2'@!`$AM_LM.NA)0(
  1883. XM3^\`#$J`9PH,K````!0!_&V>2&P`?DAX__].N@,Z4$]\`$?M_\Q@&"\33KH2\
  1884. XMAEA/2JP$"&<&<!0I0`'\4H98B[R';`H,K````!0!_&W:#*P````4`?QM"DAL^
  1885. XM`#).N@QP6$\O+`'\3KH2IDSM3.#^7$Y=3G4``$YU3G5(YP<P+B\`&"9O`!PL@
  1886. XM+P`@+P=.NA>`6$\D0"`*9@1P_V`V""H``P`#9Q!(>``"0J<O!TZZ#C!/[P`,H
  1887. XM+P8O"R\J``1.NA*D3^\`#"H`2JP!R&<$</]@`B`%3-\,X$YU``````````!PH
  1888. XM84Y5__!(YR$R)F\`+`RL````(`-Z;```AA`3<B"P`6<,<@FP`6<&<@JP`68$&
  1889. XM4HM@Z$H39V@@+`-ZY8!2K`-Z0>P#@M'`)$AP(K`39B92BR2+2A-G"G`BL!-G@
  1890. XM!%*+8/)*$V8,2'@``4ZZ%XA83V">0AM@FB2+2A-G&!`3<B"P`6<0<@FP`6<*K
  1891. XM<@JP`6<$4HM@Y$H39@)@!D(;8`#_<DJL`WIF!B!L`>Q@!$'L`X(I2`-^2JP#K
  1892. XM>F9\0?H!)$/L`T`BV"+8(M@BV#*0(FP!["!I`"1(>``H+R@`!$AL`T!.N@B",
  1893. XM3^\`#$'L`T`B""0\```#[BQL!`Q.KO_B*4`"!"E``@QR!"E!`@@I0`(4*4$"U
  1894. XM$.6`D\DL>``$*T#_\$ZN_MH@;?_P(D`C:``(`*1^`"M`__1@*BQL!`Q.KO_*/
  1895. XM*4`"!$ZN_\0I0`(,0?H`IB(()#P```/M3J[_XBE``A1^!"`'`$"``8&L`@`@5
  1896. XM!P!`@`*!K`((`*P``(`#`A!*K`#$9P1P`&`&(#P``(``+@!"K`!X(`<`0``!4
  1897. XM*4``='`!*4``FB`'`$```BE``)9P`BE``+P@!P!``(`I0`"X0?H3\BE(`>`O9
  1898. XM+`-^+RP#>DZZ^_Y"ETZZ$%Q,[4R$_]Q.74YU8V]N.C$P+S$P+S,R,"\X,"\`:
  1899. XM*@`````````````````````````````````````````````````O"R9O``A*+
  1900. XMJP`49PP(*P`#`!MF!'``8#8O+`&L3KH,UEA/)T``!"=``!!*@&8*<`PI0`0(9
  1901. XM</]@%B=L`:P`%'#SP:L`&'``)T``#"=```@F7TYU``````````````````!.(
  1902. XM5?_L2.<O$"XO`#0F;P`X*`=P,<"K`!AG!G#_8``"<`@K``<`&E;`1`!(@$C`+
  1903. XM+`!*JP`49@``A`@K``(`&V9Z<``G0``,<O^^@6<``D(O"TZZ_TY83TJ`9PP((
  1904. XMZP`%`!MP_V```BH(ZP`!`!M*!F<.("L`%"(`1($G00`,8`@@*P`4)T``#%.K,
  1905. XM``QM%B!K``1#Z``!)TD`!"`'$(!R`!(`8!(@!W(`$@`O"R\!80#_4E!/(@`@3
  1906. XM`6```=8(*P`"`!MG6'#_OH!F!G``8``!PB`'&T#__TH&9R)R"KZ!9AQR`B\!M
  1907. XM2'H!LB\K`!PK0?_P3KK\-$_O``PJ`&`:<@$O`4AM__\O*P`<*T'_\$ZZ_!A/^
  1908. XM[P`,*@!^_V```.`(ZP`!`!M*!F=2</^^@&=,5*L`#'(*OH%F)B!K``1#Z``!G
  1909. XM)TD`!!"\``TB*P`,2H%K"B\++P!A`/ZN4$]2JP`,(&L`!$/H``$G20`$(`<0J
  1910. XM@"(K``Q*@6L``1Q^_R`K``20JP`0*T#_\&=R""L`!@`:9U)(>``"0J<O*P`<C
  1911. XM3KH)\$_O``PK0/_L2@9G.%.M_^QM,D*G+RW_["\K`!Q.N@G02'@``4AM__TO"
  1912. XM*P`<3KH':$_O`!A*K`'(9@H0+?_]<AJP`6?(+RW_\"\K`!`O*P`<3KK[.$_O,
  1913. XM``PJ`&`">@!P_[J`9@@(ZP`%`!M@#+JM__!G!@CK``0`&TH&9PXB*P`4)`%$,
  1914. XM@B="``Q@&`@K``(`&V<(<@`G00`,8`@B*P`4)T$`#"!K`!`G2``$OH!G+E.KP
  1915. XM``QM%B!K``1#Z``!)TD`!"`'$(!R`!(`8!(@!W(`$@`O"R\!80#]D%!/(@!P?
  1916. XM,,"K`!AG!'#_8`QP_[B`9@1P`&`"(`1,WPCT3EU.=0T*`````$CG!Q`F;P`4;
  1917. XM""L`!P`:5L!$`$B`2,`N`'`PP*L`&&<*0JL`"'#_8``!6`@K``<`&V<4""L`@
  1918. XM!@`;9PPO"TAX__].NOTB4$]*JP`49C9"JP`(""L``@`;9Q)P`2=``!1!ZP`@M
  1919. XM)T@`$&```(0O"TZZ_)983TJ`9W8(ZP`%`!MP_V```0!*!V=F5*L`""`K``A*J
  1920. XM@&Y:(&L`!$/H``$G20`$?``<$"`&#(`````:9RX,@`````UF,E.K``AM%"!K#
  1921. XM``1#Z``!)TD`!'``$!!@``"T+PMA`/\N6$]@``"H".L`!``;</]@``"<(`9@"
  1922. XM``"6""L``0`;9DX(ZP```!LO*P`4+RL`$"\K`!Q.N@6,3^\`#"H`2H5J!@CKT
  1923. XM``4`&TJ%9@8(ZP`$`!M*A6\:2@=G"B`%1(`G0``(8`0G10`((&L`$"=(``1PU
  1924. XM,L"K`!AG%DH'9PAP_R=```A@!G``)T``"'#_8"!3JP`(;1(@:P`$0^@``2=)T
  1925. XM``1P`!`08`@O"V$`_H183TS?".!.=0``56YK;F]W;B!E<G)O<B!C;V1E``!5@
  1926. XM<V5R(&ES(&YO="!O=VYE<@!.;R!S=6-H(&9I;&4@;W(@9&ER96-T;W)Y`$YO%
  1927. XM('-U8V@@<')O8V5S<P!);G1E<G)U<'1E9"!S>7-T96T@8V%L;`!)+T\@97)RY
  1928. XM;W(`3F\@<W5C:"!D979I8V4@;W(@861D<F5S<P!!<F<@;&ES="!I<R!T;V\@,
  1929. XM;&]N9P``17AE8R!F;W)M870@97)R;W(`0F%D(&9I;&4@;G5M8F5R`$YO(&-H`
  1930. XM:6QD('!R;V-E<W,``$YO(&UO<F4@<')O8V5S<V5S(&%L;&]W960`3F\@;65M#
  1931. XM;W)Y(&%V86EL86)L90!!8V-E<W,@9&5N:65D`$)A9"!A9&1R97-S`$)U;&L@Q
  1932. XM9&5V:6-E(')E<75I<F5D``!297-O=7)C92!I<R!B=7-Y``!&:6QE(&%L<F5A]
  1933. XM9'D@97AI<W1S`$-R;W-S+61E=FEC92!L:6YK`$YO('-U8V@@9&5V:6-E``!.`
  1934. XM;W0@82!D:7)E8W1O<GD`27,@82!D:7)E8W1O<GD``$EN=F%L:60@87)G=6UES
  1935. XM;G0``$YO(&UO<F4@9FEL97,@*'5N:71S*2!A;&QO=V5D`$YO(&UO<F4@9FEL\
  1936. XM97,@*'5N:71S*2!A;&QO=V5D(&9O<B!T:&ES('!R;V-E<W,``$YO="!A('1E-
  1937. XM<FUI;F%L``!497AT(&9I;&4@:7,@8G5S>0!&:6QE(&ES('1O;R!L87)G90!.N
  1938. XM;R!S<&%C92!L969T`%-E96L@:7-S=65D('1O('!I<&4`4F5A9"UO;FQY(&9I&
  1939. XM;&4@<WES=&5M`%1O;R!M86YY(&QI;FMS``!"<F]K96X@<&EP90!-871H(&9U2
  1940. XM;F-T:6]N(&%R9W5M96YT(&5R<F]R``!-871H(&9U;F-T:6]N(')E<W5L="!IP
  1941. XM<R!O=70@;V8@<F%N9V4``$Y5__A(YP,P)F\`("1O`"0N+P`H($I*&&;\4XB14
  1942. XMRBP(($M*&&;\4XB1RR`((DO3P"M)__B\AV,"+`<@!B!*8`(2V%.`9/H@;?_XC
  1943. XM0C!H`"`+3-\,P$Y=3G5(YP,P)F\`%"1O`!@N+P`<+"\`("`'#(`````$9TQ*(
  1944. XM@&<0#(````!`9DP(ZP`&`!M@!@BK``8`&R`*9P1*AFX$<`!@.B\+3KH`/%A/)
  1945. XM"*L``@`;".L``P`;($HG2``$)T@`$"=&`!1P`&`4+PM.N@`66$]P`&`(<!8IH
  1946. XM0`0(</],WPS`3G4O"R9O``@(*P`"`!MG!'``8#Y*JP`49Q8(*P`#`!MF#B\KZ
  1947. XM`!0O*P`03KH!(E!/0>L`("=(`!!P`"=``!1RM\.K`!@(ZP`"`!LG0``,)T``7
  1948. XM""9?3G5.5?_H2.<!,BXO`#1*AVX&</]@``#2<`B^@&0"+@`@!U:`+@`"1__\L
  1949. XM)&T`""!M``C1Q]^L`%1#[`!0)E$K2/_P*TG_]"`+9P``D"!+("L`!-'`*TC_#
  1950. XM[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@>+?)9AHL4R2.("L`!"(`TH<E00`$K
  1951. XM+&W_]"R*<`!@6K7(9`B?K`!4</]@3K7(9BQ*DV<.(%.SR&,(GZP`5'#_8#C?0
  1952. XMJP`$2I-G#K/39@H@*0`$T:L`!":1<`!@'BM+__0K;?_L_^@F4V``_VX@;?_T"
  1953. XM((I"DB5'``1P`$S?3(!.74YU``````````!P84CG`1`F;P`,+B\`$"\'+PM.@
  1954. XMNO[V4$],WPB`3G5(YP<P+B\`&"9O`!PL+P`@+P=.N@MT6$\D0"`*9@1P_V`>3
  1955. XM+P8O"R\J``1.N@=X3^\`#"H`2JP!R&<$</]@`B`%3-\,X$YU``!(YP$0)F\`6
  1956. XM#$JL!`AG6"`L!`BPK`#(;@)L!'X`8`(N`$AL`*!(>``*3KH#-DAL`*`O"TZZL
  1957. XM`OQ(;`"@2'H`-$ZZ`O`@!^6`2&P`H$'L`,PO,`@`3KH"W$AL`*!(>``*3KH#1
  1958. XM`$_O`"@@+`0(3-\(@$YU.B```````````````````$Y5_^9(YP\P)F\`.BXOP
  1959. XM`#Y"+?__0JP!R"ML!`C_\GH#NJP`0&P2(`7G@$'L`@!*L`@`9P12A6#H("P`J
  1960. XM0+"%9@QP&"E`!`AP_V```2H@!>>`0>P"`-'`)$A*K0`09P@(+0`"`!-G"BM\N
  1961. XM```#[/_N8`@K?````^[_[B`\``"``,"L`%BQAP@'``-G#"`'`D#__"X``$<`_
  1962. XM`B`'<@/`@0R``````F<,#(`````!9P1*@&8&+`=2AF`,<!8I0`0(</]@``"T#
  1963. XM(`<"@````P!G``"("`<`"F<6&WP``?__+RW_[B\+3KH&CE!/*`!@/`@'``EF'
  1964. XM%DAX`^TO"TZZ!C!03R@`2H1J!`C'``D(!P`)9QH;?``!__\I;?_R!`@O+?_ND
  1965. XM+PM.N@:T4$\H`$HM__]G-B`'<GC2@<"!2H!G*DJ$:R8O!$ZZ!OQ(>`/M+PM.I
  1966. XMN@7>3^\`#"@`8`Y(>`/M+PM.N@7,4$\H`$JL`<AG!'#_8`@DAB5$``0@!4S?O
  1967. XM#/!.74YU````````````````````````<&%(YP\0+B\`&"PO`!PJ+P`@+P=.R
  1968. XMN@D<6$\F0"`+9@1P_V`>+P4O!B\K``1.N@2D3^\`#"@`2JP!R&<$</]@`B`$V
  1969. XM3-\(\$YU``!(YP,P+B\`%$J';@9P`&```*1P"+Z`9`(N`"`'5H`N``)'__Q%P
  1970. XM[`!0)E(@"V=`("L`!+"';3*PAV8,(%,DB)^L`%0@"V!N("L`!)"'<@BP@6467
  1971. XM($O1QR2()$@DDR5```2?K`!4(`M@3"1+)E-@O"`'(BP!6-"!4X!.N@8J(BP!N
  1972. XM6$ZZ!@(L`%"&(`96@"P``D;__"\&3KH)FEA/)D`@"V<2+P8O"TZZ^Z8NAV$`4
  1973. XM_U103V`"<`!,WPS`3G4``````````'!A+P<N+P`(+P=.NO\R6$\N'TYU``!(8
  1974. XMYP$P)F\`$"1O`!1^`!X;2H=G$B\*+P=.N@`64$]2@&;J</]@`G``3-\,@$YUN
  1975. XM``!(YP$0+B\`#"9O`!`(*P`&`!MG$G`*OH!F#"\++P=.NO,(4$]@,%.K``QM>
  1976. XM%B!K``1#Z``!)TD`!"`'$(!R`!(`8!(@!W(`$@`O"R\!3KKRVE!/(@`@`4S?H
  1977. XM"(!.=4Y5__A(YP`P1^P`7"`+9PQ*JP`89P8D2R938/`@"V8B2'@`(DZZ_SI81
  1978. XM3R9`2H!F!'``8!PDBW`A<@`@2Q#!4<C__"\++RT`#"\M``A.N@`.3.T,`/_PG
  1979. XM3EU.=0``3E7_\$CG#S`F;P`T)&\`.$JJ`!AG""\*3KH!LEA/*BP`Q'X!<``0Q
  1980. XM,W@`#$``8F<*#$``868,>@!@!BH\``"``%*'<BNR,W@`5\!$`$B`2,`H`'``%
  1981. XM$!,,0`!W9P``B`Q``')G0@Q``&%F``"^2'@`#"\\``"!`B\M``A.NOOL3^\`8
  1982. XM#"P`</^\@&8&<`!@``#02H1G!G!`T(!@`G`"+@``1T``8```B$J$9P1P`F`"H
  1983. XM<```0(``2'@`#"\`+RT`"$ZZ^ZA/[P`,+`!P_[R`9@9P`&```(Q*A&<&<$#0>
  1984. XM@&`"<`$N`&!(2H1G!'`"8`)P`0!`@```0`$``$`"`$AX``PO`"\M``A.NOMBN
  1985. XM3^\`#"P`</^\@&8$<`!@1DJ$9P9P0-"`8`)P`BX`8`1P`&`RD<@E2``0<``EO
  1986. XM0``4)48`'"5J`!``!"5```PE0``(2H5F!B`\``"``"('@H`E00`8(`I,WPSPM
  1987. XM3EU.=0``2.</,"9O`!PN+P`@)&\`)"@+4X<L!TJ&:S13J@`(;1(@:@`$0^@`M
  1988. XM`25)``1P`!`08`@O"DZZ\VY83RH`</^Z@&<,4X8@!1;`<@JZ@6;(0A.\AV8$U
  1989. XM<`!@!"!$(`A,WPSP3G4``$CG`S`F;P`4""L``0`;9Q`O"TAX__].NO",4$\ND
  1990. XM`&`"?@`@*P`80H!G%$JK`!1G#B\K`!0O*P`03KKY?E!/+RL`'$ZZ!-!83RP`9
  1991. XM</^^@&<&2H9F`G``3-\,P$YU2.<#$"XO`!!'[`!<(`MG-`@K``(`&V8H""L`1
  1992. XM`0`;9R`@*P`$D*L`$"P`2H9G$B\&+RL`$"\K`!Q.NNTR3^\`#"938,@O!TZZ7
  1993. XM!7Q83TS?",!.=0``2.<W$"XO`!PF;P`@+"\`)$JL`>!G!$ZZ!-1"K`'((@<DG
  1994. XM"R8&+&P$#$ZN_]`J`'#_NH!F#DZN_WPI0`'(<`4I0`0((`5,WPCL3G4``$CGZ
  1995. XM/P`N+P`<+"\`("HO`"1*K`'@9P1.N@2(0JP!R"`%4X`B!R0&)@`L;`0,3J[_1
  1996. XMOB@`</^X@&8.3J[_?"E``<AP%BE`!`@@!0R``````F<6#(`````!9PA*@&889
  1997. XM(`9@%"`$T(9@#B('=`!V`"QL!`Q.KO^^3-\`_$YU``!(YS<0+B\`'"9O`"`LP
  1998. XM+P`D2JP!X&<$3KH$#$*L`<@B!R0+)@8L;`0,3J[_UBH`</^Z@&8.3J[_?"E`(
  1999. XM`<AP!2E`!`@@!4S?".Q.=0``2.<C$"9O`!0N+P`82JP!X&<$3KH#Q$*L`<@BD
  2000. XM"R0'+&P$#$ZN_^(L`$J&9A).KO]\*4`!R'`"*4`$"'#_8`(@!DS?",1.=0``P
  2001. XM3E7__$CG(1`F;P`82JP!X&<$3KH#?$*L`<@B"W3^+&P$#$ZN_ZPN`$J'9PHBK
  2002. XM!TZN_Z9P_V`F(@LD/````^Y.KO_B+@!*AV823J[_?"E``<AP`BE`!`AP_V`"0
  2003. XM(`=,WPB$3EU.=4Y5__Q(YR$0)F\`&$JL`>!G!$ZZ`QA"K`'((@MT_BQL!`Q.H
  2004. XMKO^L+@!*AV<,(@=.KO^F(@M.KO^X(@LD/````^Y.KO_B+@!*AV823J[_?"E`G
  2005. XM`<AP`BE`!`AP_V`"(`=,WPB$3EU.=0``+P<N+P`(2JP!X&<$3KH"MB('+&P$O
  2006. XM#$ZN_]QP`"X?3G5(YS``)``F`4A"2$/$P<;`P,'40TA"0D+0@DS?``Q.=4J`I
  2007. XM:@``'D2`2H%J```,1(%A```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$1
  2008. XM@$YU+P)(030!9@``(DA`2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYUD
  2009. XM+P-V$`Q!`(!D```&X9E10PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``]
  2010. XM!N.94T,T`.:H2$)"0N:J2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#?
  2011. XM2$/GN$A`P4$F'R0?3G5.5?^>2.<S,GX`(&P!^!XH__]P3[Z`;P(N`"`'0^W_,
  2012. XMKV`"$MA3@&3Z0C5XKY/)+'@`!$ZN_MHF0$JK`*QG3"`K`*SE@"1`+"H`.$J&Z
  2013. XM9@0L*P"@2H9G-"(&0?H`LB0(=@LL;`0,3J[_T"!'4H<@"!N\``H(KR(&0>W_6
  2014. XMKR0()@<L;`0,3J[_T'#_8$Y*K`0$9A)#^@"&<``L>``$3J[]V"E`!`1![?^O'
  2015. XM*4@!?$AX`#Q(>`#Z<``O`"\`2&P!F$AL`81(;`%P0J=.N@%(3^\`(%.`9P1PC
  2016. XM_V`"<`!,WTS,3EU.=2HJ(%5S97(@06)O<G0@4F5Q=65S=&5D("HJ``!#3TY4G
  2017. XM24Y510``04)/4E0`*BHJ($)R96%K.B``:6YT=6ET:6]N+FQI8G)A<GD`````,
  2018. XM``````````````!(YP$0+B\`#"\'3KH`/%A/)D`@"V8$</]@*`@K``(``V<&A
  2019. XM<``F@&`:+RL`!$ZZ_9983W``)H!*K`'(9P1P_V`"<`!,WPB`3G4O!RXO``APR
  2020. XM`"E``<A*AVLBOJP`0&P<(`?G@$'L`@!*L`@`9PX@!^>`0>P"`-'`(`A@"'`)-
  2021. XM*4`$"'``+A].=0``2.<!`G``(CP``#``+'@`!$ZN_LXN``*'```P`$J'9@1PG
  2022. XM`&`@2JP!X&<8(&P!X$Z02H!F!'``8`Q(>``43KH`1EA/(`=,WT"`3G5AM$YUG
  2023. XM``!(YS`R+&P$!"!O`!@B;P`<)&\`("9O`"0@+P`H(B\`+"0O`#`F+P`T3J[^K
  2024. XMI$S?3`Q.=0``2.<'`"XO`!`@+`!`4X`L`$I&:S`@!DC`YX!![`(`*C`(`$H%X
  2025. XM9QH(!0`"9A0@!DC`YX!![`(`+S`(!$ZZ_'Q83U-&8,PO!TZZY2)83TS?`.!.J
  2026. XM=0``2.<`,B9L!!`@"V<4)%,B2R`K``@L>``$3J[_+B9*8.B1R"E(!!0I2`00)
  2027. XM3-],`$YU2.<!,BXO`!1P#-Z`(`=R`"QX``1.KO\Z)D`@"V8$<`!@.B='``A%=
  2028. XM[`00(&H`!"=(``21R":(2I)F`B2+2JH`!&<&(FH`!"*+)4L`!$JL`$1F!"E+I
  2029. XM`$1!ZP`,(`A,WTR`3G4``````````````````````^P````"`````@````P`=
  2030. XM```&`````````_(```/I`````````_(```/J````;"UA``!A`'<`3F\@;6]R&
  2031. XM92!T:&%N($U!6$8@9FEL97,*``!%<G)O<B!O<&5N:6YG(```=&5E(&9A:6QE2
  2032. XM9``````````H`````````````````````````````(``````?@``````````*
  2033. XM`````````````````````````````````*``````````````````````````@
  2034. XM`````````````````````````````````````````````````````````````
  2035. XM`````(``````(@``"GP```J0```*H@``"KP```K,```*Y```"NX```L(```+.
  2036. XM'@``"S````M````+4@``"VP```N````+C@``"YH```NP```+P@``"]8```OH=
  2037. XM```+^```#`@```P8```,*@``#$@```QX```,B```#)H```RL```,N@``#,X`;
  2038. XM``SD```,]```#0````T>```$`/__````#@`.````````&G``````__\````$2
  2039. XM``0``````````````5S__P````0`!````````!J,`````/__````!``$````3
  2040. XM````&I8````````"`````^P````F`````````:0```&0```!:````50```%0,
  2041. XM```!3````4@```%$```!0````3P```$X```!-````3````$L```!*````20`S
  2042. XM``$@```!'````1@```$4```!$````0P```$(```!!````0````#\````^```-
  2043. XM`/0```#P````[````.@```#D````X````-P```#8````U````-````#,````@
  2044. X9`P````(```&`````?@```%P````````#\MP`Q
  2045. X``
  2046. Xend
  2047. Xsize 8080
  2048. SHAR_EOF
  2049. echo "End of archive 1 (of 1)"
  2050. # if you want to concatenate archives, remove anything after this line
  2051. exit
  2052.